From 676f75e291d51ace09991a6ee8a4a9dba9e7f8cb Mon Sep 17 00:00:00 2001 From: Xiao-Xiong Lin Date: Thu, 16 Jan 2025 14:22:10 +0100 Subject: [PATCH 1/2] compatibility with bazel 8.0.0 --- .bazelrc | 1 + BUILD | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .bazelrc diff --git a/.bazelrc b/.bazelrc new file mode 100644 index 00000000..3d5c0ffb --- /dev/null +++ b/.bazelrc @@ -0,0 +1 @@ +common --noenable_bzlmod --enable_workspace \ No newline at end of file diff --git a/BUILD b/BUILD index 771b7e2c..b30389e9 100644 --- a/BUILD +++ b/BUILD @@ -930,7 +930,7 @@ cc_binary( tags = ["manual"], deps = ["@six_archive//:six"], ) for py in [ - "PY2", + "PY3", ]] From 67097a9ae10e8afc1a45efd4dd5974390db35a1c Mon Sep 17 00:00:00 2001 From: Xiao-Xiong Lin Date: Tue, 20 May 2025 19:38:47 +0200 Subject: [PATCH 2/2] edited maps --- .bazelversion | 1 + MODULE.bazel | 6 + MODULE.bazel.lock | 240 +++++++++++++++ assets/maps/compile_maps.py | 113 +++++++ assets/maps/to_be_compiled/example.txt | 5 + assets/models/goal_transparent.md3 | Bin 0 -> 708 bytes game_scripts/levels/demos/random_maze.lua | 10 +- game_scripts/levels/make_map_from_text.lua | 79 +++++ game_scripts/levels/openfield_map.lua | 202 +++++++++++++ game_scripts/levels/openfield_map2.lua | 274 +++++++++++++++++ .../levels/openfield_map2_fixed_loc2.lua | 274 +++++++++++++++++ .../levels/openfield_map2_fixed_loc3.lua | 274 +++++++++++++++++ .../openfield_map2_fixed_loc3_debug.lua | 276 ++++++++++++++++++ game_scripts/levels/openfield_map_episode.lua | 236 +++++++++++++++ .../levels/openfield_map_transparent.lua | 239 +++++++++++++++ .../levels/tests/debug_observation_test.lua | 2 +- python_system.bzl | 6 +- 17 files changed, 2228 insertions(+), 9 deletions(-) create mode 100644 .bazelversion create mode 100644 MODULE.bazel create mode 100644 MODULE.bazel.lock create mode 100644 assets/maps/compile_maps.py create mode 100644 assets/maps/to_be_compiled/example.txt create mode 100644 assets/models/goal_transparent.md3 create mode 100644 game_scripts/levels/make_map_from_text.lua create mode 100644 game_scripts/levels/openfield_map.lua create mode 100644 game_scripts/levels/openfield_map2.lua create mode 100644 game_scripts/levels/openfield_map2_fixed_loc2.lua create mode 100644 game_scripts/levels/openfield_map2_fixed_loc3.lua create mode 100644 game_scripts/levels/openfield_map2_fixed_loc3_debug.lua create mode 100644 game_scripts/levels/openfield_map_episode.lua create mode 100644 game_scripts/levels/openfield_map_transparent.lua diff --git a/.bazelversion b/.bazelversion new file mode 100644 index 00000000..fa5fce04 --- /dev/null +++ b/.bazelversion @@ -0,0 +1 @@ +8.0.0 \ No newline at end of file diff --git a/MODULE.bazel b/MODULE.bazel new file mode 100644 index 00000000..00bb1836 --- /dev/null +++ b/MODULE.bazel @@ -0,0 +1,6 @@ +############################################################################### +# Bazel now uses Bzlmod by default to manage external dependencies. +# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel. +# +# For more details, please check https://github.com/bazelbuild/bazel/issues/18958 +############################################################################### diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock new file mode 100644 index 00000000..99f9358d --- /dev/null +++ b/MODULE.bazel.lock @@ -0,0 +1,240 @@ +{ + "lockFileVersion": 16, + "registryFileHashes": { + "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", + "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", + "https://bcr.bazel.build/modules/abseil-cpp/20211102.0/MODULE.bazel": "70390338f7a5106231d20620712f7cccb659cd0e9d073d1991c038eb9fc57589", + "https://bcr.bazel.build/modules/abseil-cpp/20230125.1/MODULE.bazel": "89047429cb0207707b2dface14ba7f8df85273d484c2572755be4bab7ce9c3a0", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0.bcr.1/MODULE.bazel": "1c8cec495288dccd14fdae6e3f95f772c1c91857047a098fad772034264cc8cb", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.0/MODULE.bazel": "d253ae36a8bd9ee3c5955384096ccb6baf16a1b1e93e858370da0a3b94f77c16", + "https://bcr.bazel.build/modules/abseil-cpp/20230802.1/MODULE.bazel": "fa92e2eb41a04df73cdabeec37107316f7e5272650f81d6cc096418fe647b915", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/MODULE.bazel": "37bcdb4440fbb61df6a1c296ae01b327f19e9bb521f9b8e26ec854b6f97309ed", + "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", + "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", + "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", + "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d", + "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", + "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", + "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", + "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", + "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", + "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", + "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", + "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", + "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", + "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", + "https://bcr.bazel.build/modules/bazel_skylib/1.6.1/MODULE.bazel": "8fdee2dbaace6c252131c00e1de4b165dc65af02ea278476187765e1a617b917", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", + "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", + "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", + "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", + "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", + "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", + "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", + "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", + "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", + "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", + "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", + "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", + "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", + "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", + "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", + "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", + "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", + "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", + "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", + "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", + "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e", + "https://bcr.bazel.build/modules/protobuf/29.0/source.json": "b857f93c796750eef95f0d61ee378f3420d00ee1dd38627b27193aa482f4f981", + "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", + "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", + "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", + "https://bcr.bazel.build/modules/re2/2023-09-01/source.json": "e044ce89c2883cd957a2969a43e79f7752f9656f6b20050b62f90ede21ec6eb4", + "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8", + "https://bcr.bazel.build/modules/rules_android/0.1.1/source.json": "e6986b41626ee10bdc864937ffb6d6bf275bb5b9c65120e6137d56e6331f089e", + "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", + "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", + "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", + "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac", + "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/source.json": "227e83737046aa4f50015da48e98e0d8ab42fd0ec74d8d653b6cc9f9a357f200", + "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", + "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", + "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", + "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", + "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", + "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", + "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", + "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", + "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", + "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", + "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6", + "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", + "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", + "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", + "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", + "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", + "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", + "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2", + "https://bcr.bazel.build/modules/rules_java/8.6.1/source.json": "f18d9ad3c4c54945bf422ad584fa6c5ca5b3116ff55a5b1bc77e5c1210be5960", + "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", + "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", + "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", + "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d", + "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", + "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", + "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", + "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", + "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", + "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", + "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", + "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", + "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", + "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", + "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", + "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", + "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", + "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", + "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", + "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", + "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", + "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", + "https://bcr.bazel.build/modules/rules_python/0.40.0/source.json": "939d4bd2e3110f27bfb360292986bb79fd8dcefb874358ccd6cdaa7bda029320", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", + "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", + "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", + "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", + "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", + "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", + "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", + "https://bcr.bazel.build/modules/stardoc/0.7.1/source.json": "b6500ffcd7b48cd72c29bb67bcac781e12701cc0d6d55d266a652583cfcdab01", + "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d", + "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" + }, + "selectedYankedVersions": {}, + "moduleExtensions": { + "@@platforms//host:extension.bzl%host_platform": { + "general": { + "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", + "usagesDigest": "SeQiIN/f8/Qt9vYQk7qcXp4I4wJeEC0RnQDiaaJ4tb8=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "host_platform": { + "repoRuleId": "@@platforms//host:extension.bzl%host_platform_repo", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [] + } + }, + "@@rules_java+//java:rules_java_deps.bzl%compatibility_proxy": { + "general": { + "bzlTransitiveDigest": "84xJEZ1jnXXwo8BXMprvBm++rRt4jsTu9liBxz0ivps=", + "usagesDigest": "jTQDdLDxsS43zuRmg1faAjIEPWdLAbDAowI1pInQSoo=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "compatibility_proxy": { + "repoRuleId": "@@rules_java+//java:rules_java_deps.bzl%_compatibility_proxy_repo_rule", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_java+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, + "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { + "general": { + "bzlTransitiveDigest": "sFhcgPbDQehmbD1EOXzX4H1q/CD5df8zwG4kp4jbvr8=", + "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "com_github_jetbrains_kotlin_git": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository", + "attributes": { + "urls": [ + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:ksp.bzl%ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" + } + }, + "com_github_pinterest_ktlint": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "sha256": "01b2e0ef893383a50dbeb13970fe7fa3be36ca3e83259e01649945b09d736985", + "urls": [ + "https://github.com/pinterest/ktlint/releases/download/1.3.0/ktlint" + ], + "executable": true + } + }, + "rules_android": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive", + "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", + "urls": [ + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] + } + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_kotlin+", + "bazel_tools", + "bazel_tools" + ] + ] + } + } + } +} diff --git a/assets/maps/compile_maps.py b/assets/maps/compile_maps.py new file mode 100644 index 00000000..21659d89 --- /dev/null +++ b/assets/maps/compile_maps.py @@ -0,0 +1,113 @@ +import numpy as np +import os +from zipfile import ZipFile + +from src.environments import DMLabBase + +TMP_DIR = "/../../tmp" +# before running this, make sure there are no existing +# dmlab_temp_folder_* folders in the tmp folder from earlier +# builds + +DEFAULTDECALFREQUENCY=0.1 +DEFAULTRANDOMSEED=1 + +def get_map_names(): + mypath = os.path.join(os.getcwd(), "precompile_maps/to_be_compiled") + + map_names = [] + for f in os.listdir(mypath): + fname, ext = f.split(".") + if ext == "txt": + map_names.append(fname) + return map_names + +def get_map_information(map_name): + file_name = os.path.join(os.getcwd(), + "precompile_maps/to_be_compiled", + map_name+".txt") + + map_info = {'mapName' : map_name, + 'mapVariationsLayer' : "", + 'decalFrequency' : DEFAULTDECALFREQUENCY, + 'randomSeed' : DEFAULTRANDOMSEED} + with open(file_name, 'r') as file: + for line in file: + key,value = line[:-1].split('=') + if key in ["mapEntityLayer", "mapVariationsLayer", "texture"]: + value = value[1:-1] #remove quotation_marks + value = value.replace('\\n','\n') + else: + value = float(value) + map_info[key] = value + + if "P" not in map_info['mapEntityLayer']: + print("Added spawn location, make sure map has one spawn location.") + map_info['mapEntityLayer'].replace(" ", "P") + if "A" not in map_info['mapEntityLayer']: + print("Added goal location, make sure map has one goal location.") + map_info['mapEntityLayer'].replace(" ", "A") + return map_info + +def compile_map(map_info): + env = DMLabBase() + + env.load_map_from_text(map_info['mapName'], + map_info['mapEntityLayer'], + map_info['mapVariationsLayer'], + map_info['decalFrequency'], + map_info['texture'], + map_info['randomSeed']) + + return env + +def check_no_temp_dirs(): + count = 0 + for f in os.listdir(TMP_DIR): + if f.startswith("dmlab_temp_folder_"): + count += 1 + return count + +def get_tmp_dir(): + for f in os.listdir(TMP_DIR): + if f.startswith("dmlab_temp_folder_"): + return os.path.join(TMP_DIR, f, 'baselab') + +def extract_bsp_file(map_name): + mypath = os.path.join(os.getcwd(), "precompile_maps/to_be_compiled") + tmp_dir = get_tmp_dir() + + for f in os.listdir(tmp_dir): + zf = ZipFile(os.path.join(tmp_dir, f), 'r') + zf.extractall(tmp_dir) + zf.close() + + oldplace = os.path.join(tmp_dir, "maps", map_name+".bsp") + newplace = os.path.join(os.getcwd(), "precompile_maps", + "bsp_files", map_name+".bsp") + # make sure file exists + f = open(newplace, 'a') + f.close() + + os.rename(oldplace, newplace) + +if __name__ == "__main__": + if check_no_temp_dirs(): + print("ERROR: existing temp. folders detected.\nDelete these and try again.") + else: + # create dir where compiled bsp files will be placed + if not os.path.exists("precompile_maps/bsp_files"): + os.makedirs("precompile_maps/bsp_files") + + for map_name in get_map_names(): + map_info = get_map_information(map_name) + env = compile_map(map_info) + extract_bsp_file(map_name) + env.lab.close() + + + + + + + diff --git a/assets/maps/to_be_compiled/example.txt b/assets/maps/to_be_compiled/example.txt new file mode 100644 index 00000000..51278549 --- /dev/null +++ b/assets/maps/to_be_compiled/example.txt @@ -0,0 +1,5 @@ +mapEntityLayer="*****\n*PA *\n* *\n* *\n*****" +mapVariationsLayer="*****\n*AAA*\n*AAA*\n*BBB*\n*****" +decalFrequency=0.1 +randomSeed=1 +texture="TETRIS" diff --git a/assets/models/goal_transparent.md3 b/assets/models/goal_transparent.md3 new file mode 100644 index 0000000000000000000000000000000000000000..426834f886467aa541683a73a30bfa8d3e338ed6 GIT binary patch literal 708 zcmbu5y-veG5QGnKApDnfkvpiMNDC$sG%1j1D3B-|WEYVfkihhQ170B#JU~hsA_^XY zGRhNBrm$q@bMC}Z0xOMXW_NDAN%!=;y={yc+$L#ue{gY=_wy`G_6JE@-QU%MjXTcd zpDo@OjoG_;e0^y(#vf0gW9cL5NILSrvU6De@XWfp@#Nt;^>csG+y%CT4Phj3V@J)A z5bDOWUY_3dd$j*mT2+6GB})Q65E|B_m#tqBuL?~8y=MKom>jpFH$BfziWwO^?ihprFHPkbi-{eD(yu03;RzkKZSUs{Q1_y7O^ literal 0 HcmV?d00001 diff --git a/game_scripts/levels/demos/random_maze.lua b/game_scripts/levels/demos/random_maze.lua index bf08b6b3..d39ea21c 100644 --- a/game_scripts/levels/demos/random_maze.lua +++ b/game_scripts/levels/demos/random_maze.lua @@ -82,15 +82,15 @@ function api:createPickup(classname) end function api:start(episode, seed, params) - random:seed(seed) - local rows, cols = 15, 15 + random:seed(0) + local rows, cols = 21, 21 local mazeT = generateTensorMaze(rows, cols) local maze = maze_generation.mazeGeneration{height = rows, width = cols} local variations = {'.', 'A', 'B', 'C'} mazeT:applyIndexed(function(val, index) local row, col = unpack(index) if 1 < row and row < rows and 1 < col and col < cols and - random:uniformReal(0, 1) < 0.15 then + random:uniformReal(0, 1) < 0.75 then maze:setEntityCell(row, col, ' ') else maze:setEntityCell(row, col, val == 0 and '*' or ' ') @@ -113,7 +113,7 @@ function api:start(episode, seed, params) if distance > 5 then maze:setEntityCell(row, col, 'P') end - if 0 < distance and distance < 5 then + if 0 < distance and distance < 1 then maze:setEntityCell(row, col, 'A') end end @@ -134,7 +134,7 @@ end custom_observations.decorate(api) setting_overrides.decorate{ api = api, - apiParams = {episodeLengthSeconds = 3 * 60, camera = {750, 750, 750}}, + apiParams = {episodeLengthSeconds = 3 * 5, camera = {750, 750, 750}}, decorateWithTimeout = true } diff --git a/game_scripts/levels/make_map_from_text.lua b/game_scripts/levels/make_map_from_text.lua new file mode 100644 index 00000000..0de8d0de --- /dev/null +++ b/game_scripts/levels/make_map_from_text.lua @@ -0,0 +1,79 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] +local TEXT_MAP = [[ +************** +*G * A ** * +* * +***** I * +* * +* * +* * * * +* ***H******* +* P * +************** +]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + api._map = make_map.makeMap{ + mapName = "openfield_map", + mapEntityLayer = TEXT_MAP, + useSkybox = true, + textureSet = texture_sets.TETRIS + } +end + +-- `make_map` has default pickup types A = apple_reward and G = goal. +-- This callback is used to create pickups with those names. +function api:createPickup(classname) + return pickups.defaults[classname] +end + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + local mapName = api._map + api._map = '' + return mapName +end + +return api diff --git a/game_scripts/levels/openfield_map.lua b/game_scripts/levels/openfield_map.lua new file mode 100644 index 00000000..5067185e --- /dev/null +++ b/game_scripts/levels/openfield_map.lua @@ -0,0 +1,202 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + + +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +-- `make_map` has default pickup types A = apple_reward and G = goal. +-- This callback is used to create pickups with those names. +function api:createPickup(classname) + return pickups.defaults[classname] +end + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=random:uniformInt(1, 3) + print("Random number:", rand_num) + -- print(TEXT_MAP[rand_num]) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 5 * 60, camera = {750, 750, 750}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map2.lua b/game_scripts/levels/openfield_map2.lua new file mode 100644 index 00000000..5a4cbd77 --- /dev/null +++ b/game_scripts/levels/openfield_map2.lua @@ -0,0 +1,274 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + +local game = require 'dmlab.system.game' +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +local GOAL = { + name = 'Goal', + classname = 'goal', + model = 'models/goal_transparent.md3', -- use large model + quantity = 10, + type = pickups.type.GOAL +} + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +-- function api:init(params) +-- -- Seed the map so only one map is created with lights and decals placed in +-- -- the same place each run. + +-- api._has_goal = false + + +-- end +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +function api:createPickup(classname) + if classname=='goal' then + return GOAL + end + return pickups.defaults[classname] +end + + +function api:start(episode, seed, params) + -- print("Start",episode, seed, params) + -- random:seed(seed) + -- randomMap:seed(random:mapGenerationSeed()) + + + api._has_goal = false + api._count = 0 + api._finish_count = 0 +end + +function api:pickup(spawn_id) + print('api:pickup: ',spawn_id,'; Time: ',game:episodeTimeSeconds()) + api._count = api._count + 1 + if not api._has_goal and api._count == api._finish_count then + game:finishMap() + print('should not be') + end +end +function api:hasEpisodeFinished(timeSeconds) + return api._count>0 +end +function api:updateSpawnVars(spawnVars) + local classname = spawnVars.classname + -- print('updateSpawnVars ',classname) + -- if spawnVars.random_items then + -- local possibleClassNames = helpers.split(spawnVars.random_items, ',') + -- if #possibleClassNames > 0 then + -- classname = possibleClassNames[ + -- random:uniformInt(1, #possibleClassNames)] + -- end + -- end + local pickup = pickups.defaults[spawnVars.classname] + if pickup then + -- print('updateSpawnVars: pickup!') + -- if pickup.type == pickups.type.REWARD and pickup.quantity > 0 then + -- api._finish_count = api._finish_count + 1 + -- spawnVars.id = tostring(api._finish_count) + -- end + if pickup.type == pickups.type.GOAL then + spawnVars.id = tostring(10) + api._has_goal = true + end + end + if classname == 'goal' then + + -- print('updateSpawnVars ',classname) + -- api._has_goal = true + end + return spawnVars +end + + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=random:uniformInt(1, 3) + print("Map number:", rand_num) + -- print(TEXT_MAP[rand_num]) + api.setInstruction(tostring(rand_num)) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 2 * 60, camera = {750, 750, 750}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map2_fixed_loc2.lua b/game_scripts/levels/openfield_map2_fixed_loc2.lua new file mode 100644 index 00000000..3552c8b9 --- /dev/null +++ b/game_scripts/levels/openfield_map2_fixed_loc2.lua @@ -0,0 +1,274 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + +local game = require 'dmlab.system.game' +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +local GOAL = { + name = 'Goal', + classname = 'goal', + model = 'models/goal_transparent.md3', -- use large model + quantity = 10, + type = pickups.type.GOAL +} + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +-- function api:init(params) +-- -- Seed the map so only one map is created with lights and decals placed in +-- -- the same place each run. + +-- api._has_goal = false + + +-- end +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +function api:createPickup(classname) + if classname=='goal' then + return GOAL + end + return pickups.defaults[classname] +end + + +function api:start(episode, seed, params) + -- print("Start",episode, seed, params) + -- random:seed(seed) + -- randomMap:seed(random:mapGenerationSeed()) + + + api._has_goal = false + api._count = 0 + api._finish_count = 0 +end + +function api:pickup(spawn_id) + print('api:pickup: ',spawn_id,'; Time: ',game:episodeTimeSeconds()) + api._count = api._count + 1 + if not api._has_goal and api._count == api._finish_count then + game:finishMap() + print('should not be') + end +end +function api:hasEpisodeFinished(timeSeconds) + return api._count>0 +end +function api:updateSpawnVars(spawnVars) + local classname = spawnVars.classname + -- print('updateSpawnVars ',classname) + -- if spawnVars.random_items then + -- local possibleClassNames = helpers.split(spawnVars.random_items, ',') + -- if #possibleClassNames > 0 then + -- classname = possibleClassNames[ + -- random:uniformInt(1, #possibleClassNames)] + -- end + -- end + local pickup = pickups.defaults[spawnVars.classname] + if pickup then + -- print('updateSpawnVars: pickup!') + -- if pickup.type == pickups.type.REWARD and pickup.quantity > 0 then + -- api._finish_count = api._finish_count + 1 + -- spawnVars.id = tostring(api._finish_count) + -- end + if pickup.type == pickups.type.GOAL then + spawnVars.id = tostring(10) + api._has_goal = true + end + end + if classname == 'goal' then + + -- print('updateSpawnVars ',classname) + -- api._has_goal = true + end + return spawnVars +end + + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=2 -- random:uniformInt(1, 3) + print("Map number:", rand_num) + -- print(TEXT_MAP[rand_num]) + api.setInstruction(tostring(rand_num)) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 2 * 60, camera = {1050, 1050, 1000}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map2_fixed_loc3.lua b/game_scripts/levels/openfield_map2_fixed_loc3.lua new file mode 100644 index 00000000..13f44a20 --- /dev/null +++ b/game_scripts/levels/openfield_map2_fixed_loc3.lua @@ -0,0 +1,274 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + +local game = require 'dmlab.system.game' +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +local GOAL = { + name = 'Goal', + classname = 'goal', + model = 'models/goal_transparent.md3', -- use large model + quantity = 10, + type = pickups.type.GOAL +} + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +-- function api:init(params) +-- -- Seed the map so only one map is created with lights and decals placed in +-- -- the same place each run. + +-- api._has_goal = false + + +-- end +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +function api:createPickup(classname) + if classname=='goal' then + return GOAL + end + return pickups.defaults[classname] +end + + +function api:start(episode, seed, params) + -- print("Start",episode, seed, params) + -- random:seed(seed) + -- randomMap:seed(random:mapGenerationSeed()) + + + api._has_goal = false + api._count = 0 + api._finish_count = 0 +end + +function api:pickup(spawn_id) + print('api:pickup: ',spawn_id,'; Time: ',game:episodeTimeSeconds()) + api._count = api._count + 1 + if not api._has_goal and api._count == api._finish_count then + game:finishMap() + print('should not be') + end +end +function api:hasEpisodeFinished(timeSeconds) + return api._count>0 +end +function api:updateSpawnVars(spawnVars) + local classname = spawnVars.classname + -- print('updateSpawnVars ',classname) + -- if spawnVars.random_items then + -- local possibleClassNames = helpers.split(spawnVars.random_items, ',') + -- if #possibleClassNames > 0 then + -- classname = possibleClassNames[ + -- random:uniformInt(1, #possibleClassNames)] + -- end + -- end + local pickup = pickups.defaults[spawnVars.classname] + if pickup then + -- print('updateSpawnVars: pickup!') + -- if pickup.type == pickups.type.REWARD and pickup.quantity > 0 then + -- api._finish_count = api._finish_count + 1 + -- spawnVars.id = tostring(api._finish_count) + -- end + if pickup.type == pickups.type.GOAL then + spawnVars.id = tostring(10) + api._has_goal = true + end + end + if classname == 'goal' then + + -- print('updateSpawnVars ',classname) + -- api._has_goal = true + end + return spawnVars +end + + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=3 -- random:uniformInt(1, 3) + print("Map number:", rand_num) + -- print(TEXT_MAP[rand_num]) + api.setInstruction(tostring(rand_num)) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 2 * 60, camera = {1050, 1050, 1000}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map2_fixed_loc3_debug.lua b/game_scripts/levels/openfield_map2_fixed_loc3_debug.lua new file mode 100644 index 00000000..21f313f4 --- /dev/null +++ b/game_scripts/levels/openfield_map2_fixed_loc3_debug.lua @@ -0,0 +1,276 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + +local game = require 'dmlab.system.game' +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' +local debug_observations = require 'decorators.debug_observations' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +local GOAL = { + name = 'Goal', + classname = 'goal', + model = 'models/goal_transparent.md3', -- use large model + quantity = 10, + type = pickups.type.GOAL +} + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +-- function api:init(params) +-- -- Seed the map so only one map is created with lights and decals placed in +-- -- the same place each run. + +-- api._has_goal = false + + +-- end +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +function api:createPickup(classname) + if classname=='goal' then + return GOAL + end + return pickups.defaults[classname] +end + + +function api:start(episode, seed, params) + -- print("Start",episode, seed, params) + -- random:seed(seed) + -- randomMap:seed(random:mapGenerationSeed()) + + + api._has_goal = false + api._count = 0 + api._finish_count = 0 +end + +function api:pickup(spawn_id) + print('api:pickup: ',spawn_id,'; Time: ',game:episodeTimeSeconds()) + api._count = api._count + 1 + if not api._has_goal and api._count == api._finish_count then + game:finishMap() + print('should not be') + end +end +function api:hasEpisodeFinished(timeSeconds) + return api._count>0 +end +function api:updateSpawnVars(spawnVars) + local classname = spawnVars.classname + -- print('updateSpawnVars ',classname) + -- if spawnVars.random_items then + -- local possibleClassNames = helpers.split(spawnVars.random_items, ',') + -- if #possibleClassNames > 0 then + -- classname = possibleClassNames[ + -- random:uniformInt(1, #possibleClassNames)] + -- end + -- end + local pickup = pickups.defaults[spawnVars.classname] + if pickup then + -- print('updateSpawnVars: pickup!') + -- if pickup.type == pickups.type.REWARD and pickup.quantity > 0 then + -- api._finish_count = api._finish_count + 1 + -- spawnVars.id = tostring(api._finish_count) + -- end + if pickup.type == pickups.type.GOAL then + spawnVars.id = tostring(10) + api._has_goal = true + end + end + if classname == 'goal' then + + -- print('updateSpawnVars ',classname) + -- api._has_goal = true + end + return spawnVars +end + + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=3 -- random:uniformInt(1, 3) + print("Map number:", rand_num) + -- print(TEXT_MAP[rand_num]) + api.setInstruction(tostring(rand_num)) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + debug_observations.setMaze(mapName) + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 2 * 60, camera = {750, 750, 750}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map_episode.lua b/game_scripts/levels/openfield_map_episode.lua new file mode 100644 index 00000000..22cf3438 --- /dev/null +++ b/game_scripts/levels/openfield_map_episode.lua @@ -0,0 +1,236 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + + +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } + api._has_goal=false +end + +function api:start(episode, seed) + random:seed(seed) + randomMap:seed(random:themeGenerationSeed()) + self._defaultObjectContext = kwargs.objectContext or + object_generator.createContext() + self._timers = Timer.new() + self._has_goal = false +end + +-- `make_map` has default pickup types A = apple_reward and G = goal. +-- This callback is used to create pickups with those names. +function api:createPickup(classname) + return pickups.defaults[classname] +end + +function api:pickup(classname) + if classname == 'goal' then + self._has_goal=true + end +end + +function api:hasEpisodeFinished(timeSeconds) + if self._has_goal then + return true + end + if kwargs.hasEpisodeFinished then + return kwargs.hasEpisodeFinished(timeSeconds) + end +end +-- function api:updateSpawnVars(spawnVars) +-- local classname = spawnVars.classname +-- if classname == 'goal' then +-- spawnVars.id = tostring(GOAL_ID) +-- spawnVars.wait = "-1" +-- spawnVars.spawnflags = "1" +-- end +-- return spawnVars +-- end + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=random:uniformInt(1, 3) + print("Random number:", rand_num) + -- print(TEXT_MAP[rand_num]) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 5 * 60, camera = {750, 750, 750}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/openfield_map_transparent.lua b/game_scripts/levels/openfield_map_transparent.lua new file mode 100644 index 00000000..48981257 --- /dev/null +++ b/game_scripts/levels/openfield_map_transparent.lua @@ -0,0 +1,239 @@ +--[[ Copyright (C) 2018 Google Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +]] + +-- Demonstration of creating a fixed level described using text. + +-- local maze_generation = require 'dmlab.system.maze_generation' +-- local tensor = require 'dmlab.system.tensor' +-- local log = require 'common.log' +-- local random = require 'common.random' + +local game = require 'dmlab.system.game' +local make_map = require 'common.make_map' +local pickups = require 'common.pickups' +local texture_sets = require 'themes.texture_sets' +local custom_observations = require 'decorators.custom_observations' +local setting_overrides = require 'decorators.setting_overrides' +local random = require 'common.random' + +local api = {} + +--[[ Text map contents: + +'P' - Player spawn point. Player is spawned with random orientation. +'A' - Apple pickup. 1 reward point when picked up. +'G' - Goal object. 10 reward points and the level restarts. +'I' - Door. Open and closes West-East corridors. +'H' - Door. Open and closes North-South corridors. +'*' - Walls. + +Lights are placed randomly through out and decals are randomly placed on the +walls according to the theme. +]] + +local TEXT_MAP = { + +[[ +********************* +*G PPPPPPPPPPPPP* +* *PPPPPPP*PPP*P* +* PPPPPPPPPPP*PPP* +* *PPPPPPPPPP*PPPP* +* *PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +*PP**PPP*P**PPP**PPP* +*PPPPPPPPPPPPPPPPPPP* +**PPPPPPPPPP*PPPP*PP* +*PPPPPPPPPPPPPPPPPPP* +*P*PPPPPPPP*PPP*P*PP* +*PPPPPPP*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PPP*PPP*P* +*P*PPPPPPPPP*PPPPPPP* +* P**PPP*P**PPP**PPP* +* PPPPPPPPPPPPPPPPP* +** PPPPPPPP*PPPP*PP* +* PPPPPPPPPPPPPPP* +* * PPPPP*PPP*P*PP* +*G P*PPPPPPPPPPP* +********************* +]] +, +[[ +********************* +*PPPPPPPPPPPPPPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPPPPPPPPPPPPPP*PPP* +*PPP*PPPPPPPPPP*PPPP* +*P*PPPPPPPPPPPPPPPPP* +*PPPPPPPPPPP**PPPPP** +*PPPPP*P*PPP*PPPPPPP* +*PPPPP*PPPPPPP*PPP*P* +*PPP*PPPPP*PPPPPPPPP* +*PP*PPPPPPPPP*PPPP*P* +*PPPPPPPPP*PPPPPPPPP* +*PPP*PPPPP*PP * P *P* +*P*PPPPPPPPP* P* +*PP**PPP*P** ** * +*PPPPPPPPP G * +**PPPPPPPPP * * * +*PPPPPPPPPPP P* +*P*PPPPPPPP*P * *PP* +*PPPPPPP*PPPPP P PPP* +********************* +]] +} + + +local GOAL = { + name = 'Goal', + classname = 'goal', + model = 'models/goal_transparent.md3', -- use large model + quantity = 10, + type = pickups.type.GOAL +} + +-- local TEXT_MAP = [[ +-- ********************* +-- *GPPPPPPPPPPPPPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPPPPPPPPPPPPPP*PPP* +-- *PPP*PPPPPPPPPP*PPPP* +-- *P*PPPPPPPPPPPPPPPPP* +-- *PPPPPPPPPPP**PPPPP** +-- *PPPPP*P*PPP*PPPPPPP* +-- *PPPPP*PPPPPPP*PPP*P* +-- *PPP*PPPPP*PPPPPPPPP* +-- *PP*PPPPPPPPP*PPPP*P* +-- *PPPPPPPPP*PPPPPPPPP* +-- *PPP*PPPPP*PP * P *P* +-- *P*PPPPPPPPP* P* +-- *PP**PPP*P** ** * +-- *PPPPPPPPP G * +-- **PPPPPPPPP * * * +-- *PPPPPPPPPPP P* +-- *P*PPPPPPPP*P * *PP* +-- *PPPPPPP*PPPPP P PPP* +-- ********************* +-- ]] + +-- Called only once at start up. Settings not recognised by DM Lab internal +-- are forwarded through the params dictionary. +function api:init(params) + -- Seed the map so only one map is created with lights and decals placed in + -- the same place each run. + make_map.random():seed(1) + api._has_goal = false + + api._map = { + make_map.makeMap{ + mapName = "openfield_map1", + mapEntityLayer = TEXT_MAP[1], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map2", + mapEntityLayer = TEXT_MAP[2], + useSkybox = true, + textureSet = texture_sets.TETRIS + }, + make_map.makeMap{ + mapName = "openfield_map3", + mapEntityLayer = TEXT_MAP[3], + useSkybox = true, + textureSet = texture_sets.TETRIS + } + } +end + +-- `make_map` has default pickup types A = apple_reward and G = goal. +-- This callback is used to create pickups with those names. +function api:createPickup(classname) + if classname=='goal' then + return GOAL + end + return pickups.defaults[classname] +end + +function api:hasEpisodeFinished(timeSeconds) + return api._has_goal +end + +function api:handlePickup(pickup) + print("Pickup collected:", pickup.classname) + if pickup.classname == 'goal' then + api._has_goal = true + game:addScore(pickup.quantity or 10) + game:finishMap() + end +end + +function api:trigger(spawnId, targetName) + print("Pickup collected:", spawnId, targetName) + if spawnId == 0 and targetName == 'reward' then + api._has_goal = true + game:addScore(pickup.quantity or 10) + game:finishMap() + + end + + return false +end + + +-- On first call we return the name of the map. On subsequent calls we return +-- an empty string. This informs the engine to only perform a quik map restart +-- instead. +function api:nextMap() + rand_num=random:uniformInt(1, 3) + print("Random number:", rand_num) + -- print(TEXT_MAP[rand_num]) + local mapName = api._map[rand_num] + -- api._map[rand_num] = '' + return mapName +end + +custom_observations.decorate(api) +setting_overrides.decorate{ + api = api, + apiParams = {episodeLengthSeconds = 2 * 60, camera = {750, 750, 750}}, + decorateWithTimeout = true +} +return api diff --git a/game_scripts/levels/tests/debug_observation_test.lua b/game_scripts/levels/tests/debug_observation_test.lua index 522d416e..66be4ba6 100644 --- a/game_scripts/levels/tests/debug_observation_test.lua +++ b/game_scripts/levels/tests/debug_observation_test.lua @@ -51,7 +51,7 @@ function api:nextMap() local maze = maze_generation:mazeGeneration{entity = MAP} debug_observations.setMaze(maze) -- Override default camera position. - debug_observations.setCameraPos{395, 220, 400} + debug_observations.setCameraPos{395, 220, 1000} return make_map.makeMap{ mapName = 'empty_room', mapEntityLayer = MAP, diff --git a/python_system.bzl b/python_system.bzl index 860cd415..a562b4cb 100644 --- a/python_system.bzl +++ b/python_system.bzl @@ -25,11 +25,11 @@ exports_files(["defs.bzl"]) cc_library( name = "python_headers", hdrs = select({ - "@bazel_tools//tools/python:PY2": glob(["python2/**/*.h", "numpy2/**/*.h"]), + "@bazel_tools//tools/python:PY3": glob(["python3/**/*.h", "numpy3/**/*.h"]), }), includes = select({ - "@bazel_tools//tools/python:PY2": ["python2", "numpy2"], + "@bazel_tools//tools/python:PY3": ["python3", "numpy3"], }), visibility = ["//visibility:public"], @@ -68,5 +68,5 @@ python_repo = repository_rule( implementation = _python_repo_impl, configure = True, local = True, - attrs = {"py_version": attr.string(default = "PY2AND3", values = ["PY2", "PY3", "PY2AND3"])}, + attrs = {"py_version": attr.string(default = "PY3", values = ["PY2", "PY3", "PY2AND3"])}, )