diff --git a/asset/icons/icon_about.FCStd b/asset/icons/icon_about.FCStd
new file mode 100644
index 0000000..94d1424
Binary files /dev/null and b/asset/icons/icon_about.FCStd differ
diff --git a/asset/icons/icon_about.obj b/asset/icons/icon_about.obj
new file mode 100644
index 0000000..0418da8
--- /dev/null
+++ b/asset/icons/icon_about.obj
@@ -0,0 +1,1775 @@
+# FreeCAD v0.19 build24291 (Git) Arch module
+# http://www.freecadweb.org
+mtllib icon_about.mtl
+o Body
+usemtl color_cccccc
+v 14.675442 -10.23889 0.0
+v 15.353917 -9.560415 0.0
+v 14.675442 -10.23889 3.0
+v 15.353917 -9.560415 3.0
+v 15.114833 -15.301475 0.0
+v 15.298289 -15.272027 0.0
+v 15.208899 -15.301311 0.0
+v 15.374218 -15.2165 0.0
+v 14.949222 -15.217236 0.0
+v 15.765799 -14.762954 0.0
+v 15.025341 -15.272499 0.0
+v 14.223362 -15.690453 0.0
+v 14.16604 -16.05475 0.0
+v 14.083766 -16.10952 0.0
+v 14.226051 -15.97622 0.0
+v 14.257287 -15.882449 0.0
+v 14.256357 -15.783618 0.0
+v 13.521331 -16.316172 0.0
+v 16.304241 -13.432289 0.0
+v 16.361555 -13.618646 0.0
+v 16.342106 -13.715549 0.0
+v 16.348459 -13.520681 0.0
+v 16.2337 -13.363063 0.0
+v 16.144489 -13.320516 0.0
+v 16.09053 -14.259377 0.0
+v 14.270746 -14.53876 0.0
+v 14.300143 -14.574265 0.0
+v 14.139029 -14.698969 0.0
+v 16.323135 -12.47264 0.0
+v 16.499805 -12.415101 0.0
+v 16.416037 -12.457893 0.0
+v 16.566206 -12.348472 0.0
+v 16.623133 -12.171602 0.0
+v 16.608707 -12.264556 0.0
+v 13.794 -14.915328 0.0
+v 12.935629 -16.442635 0.0
+v 12.161164 -16.429523 0.0
+v 12.338034 -16.486452 0.0
+v 12.24508 -16.472025 0.0
+v 12.094535 -16.363125 0.0
+v 15.292789 -13.076025 0.0
+v 12.051743 -16.279356 0.0
+v 12.036996 -16.186453 0.0
+v 16.579317 -11.574008 0.0
+v 15.363626 -12.47264 0.0
+v 15.409519 -12.47696 0.0
+v 15.383773 -12.679064 0.0
+v 13.855247 -13.472053 -0.0
+v 13.323159 -13.918528 -0.0
+v 13.970071 -14.81282 0.0
+v 11.18912 -16.007809 0.0
+v 11.146573 -16.097017 0.0
+v 11.077347 -16.167559 0.0
+v 11.830572 -15.247091 0.0
+v 12.036996 -15.226944 0.0
+v 12.032677 -15.272838 0.0
+v 14.202544 -12.870518 0.0
+v 15.344807 -12.87904 0.0
+v 10.794086 -16.205425 0.0
+v 10.988955 -16.211779 0.0
+v 10.89099 -16.224873 0.0
+v 12.670455 -14.156093 -0.0
+v 14.323159 -12.186477 0.0
+v 16.112902 -10.283585 0.0
+v 16.191433 -10.343596 0.0
+v 16.246201 -10.42587 0.0
+v 10.250258 -15.953848 0.0
+v 11.433611 -15.156107 0.0
+v 15.9203 -10.253279 0.0
+v 16.019131 -10.252349 0.0
+v 11.975863 -14.156093 -0.0
+v 11.630596 -15.208125 0.0
+v 15.827134 -10.286274 0.0
+v 16.452854 -10.988305 0.0
+v 15.052011 -10.715636 0.0
+v 14.202544 -11.502437 0.0
+v 9.746682 -15.629116 0.0
+v 11.323159 -13.918528 -0.0
+v 14.675442 -10.23889 0.0
+v 14.710948 -10.209493 0.0
+v 14.835651 -10.370607 0.0
+v 15.438156 -9.394803 0.0
+v 15.409182 -9.484295 0.0
+v 15.353917 -9.560415 0.0
+v 13.855247 -10.900902 0.0
+v 14.949503 -10.539565 0.0
+v 15.437994 -9.300737 0.0
+v 15.353182 -9.135418 0.0
+v 15.40871 -9.211347 0.0
+v 9.208324 -15.072216 0.0
+v 9.293136 -15.237535 0.0
+v 9.237609 -15.161608 0.0
+v 9.208161 -14.978151 0.0
+v 9.237137 -14.888659 0.0
+v 9.970876 -14.134064 0.0
+v 10.79107 -13.472053 -0.0
+v 9.2924 -14.812539 0.0
+v 9.810667 -14.002347 0.0
+v 9.93537 -14.163461 0.0
+v 13.323159 -10.454426 0.0
+v 14.899636 -8.743837 0.0
+v 9.696815 -13.833388 0.0
+v 9.594308 -13.657317 0.0
+v 10.443774 -12.870518 -0.0
+v 8.627187 -14.120605 0.0
+v 8.819183 -14.086679 0.0
+v 8.726018 -14.119675 0.0
+v 13.212707 -9.216846 0.0
+v 14.396059 -8.419106 0.0
+v 12.670455 -10.216862 0.0
+v 8.400117 -13.947084 0.0
+v 8.533417 -14.08937 0.0
+v 8.454885 -14.029358 0.0
+v 13.015722 -9.164829 0.0
+v 12.815745 -9.125863 0.0
+v 13.457197 -8.365146 0.0
+v 13.852231 -8.16753 0.0
+v 13.657364 -8.161176 0.0
+v 13.755328 -8.148081 0.0
+v 13.568971 -8.205395 0.0
+v 13.499744 -8.275937 0.0
+v 12.609323 -9.146009 0.0
+v 11.975863 -10.216862 0.0
+v 12.613642 -9.100117 0.0
+v 8.193463 -13.384648 0.0
+v 9.282692 -11.900313 0.0
+v 10.443774 -11.502437 -0.0
+v 10.323159 -12.186477 -0.0
+v 9.262545 -11.693891 0.0
+v 9.236798 -11.895994 0.0
+v 8.067001 -12.798946 0.0
+v 9.301511 -11.493914 0.0
+v 9.353529 -11.296929 0.0
+v 10.79107 -10.900902 0.0
+v 12.551784 -8.00983 0.0
+v 12.594575 -8.093598 0.0
+v 12.609323 -8.186501 0.0
+v 12.485154 -7.94343 0.0
+v 10.852319 -9.457625 0.0
+v 11.323159 -10.454426 0.0
+v 10.676248 -9.560133 0.0
+v 8.323183 -11.900313 0.0
+v 8.023185 -12.201351 0.0
+v 10.375572 -9.834194 0.0
+v 12.308285 -7.886503 0.0
+v 12.401237 -7.900928 0.0
+v 10.50729 -9.673985 0.0
+v 10.346175 -9.798689 0.0
+v 8.146512 -11.957852 0.0
+v 8.230281 -11.915061 0.0
+v 8.03761 -12.108398 0.0
+v 8.080112 -12.024482 0.0
+v 11.71069 -7.930319 0.0
+v 8.342076 -10.940665 0.0
+v 8.501828 -11.052439 0.0
+v 8.412619 -11.009892 0.0
+v 11.124988 -8.056782 0.0
+v 10.422956 -8.682502 0.0
+v 8.284762 -10.754308 0.0
+v 8.297858 -10.852272 0.0
+v 8.304212 -10.657405 0.0
+v 10.38903 -8.490504 0.0
+v 10.389961 -8.589335 0.0
+v 10.562551 -8.263434 0.0
+v 10.420266 -8.396734 0.0
+v 10.480278 -8.318203 0.0
+v 8.555788 -10.113577 0.0
+v 9.43742 -9.071642 0.0
+v 9.620977 -9.100454 0.0
+v 9.697097 -9.155719 0.0
+v 9.531486 -9.07148 0.0
+v 8.88052 -9.61 0.0
+v 9.2721 -9.156454 0.0
+v 9.348028 -9.100926 0.0
+v 15.409182 -9.484295 3.0
+v 15.353917 -9.560415 3.0
+v 15.438156 -9.394803 3.0
+v 15.437994 -9.300737 3.0
+v 15.40871 -9.211347 3.0
+v 15.353182 -9.135418 3.0
+v 14.675442 -10.23889 3.0
+v 14.710948 -10.209493 3.0
+v 15.114833 -15.301475 3.0
+v 15.208899 -15.301311 3.0
+v 15.298289 -15.272027 3.0
+v 15.374218 -15.2165 3.0
+v 15.025341 -15.272499 3.0
+v 14.949222 -15.217236 3.0
+v 15.765799 -14.762954 3.0
+v 14.256357 -15.783618 3.0
+v 14.226051 -15.97622 3.0
+v 14.257287 -15.882449 3.0
+v 14.223362 -15.690453 3.0
+v 14.083766 -16.10952 3.0
+v 14.16604 -16.05475 3.0
+v 16.348459 -13.520681 3.0
+v 16.342106 -13.715549 3.0
+v 16.361555 -13.618646 3.0
+v 13.521331 -16.316172 3.0
+v 16.144489 -13.320516 3.0
+v 16.09053 -14.259377 3.0
+v 16.304241 -13.432289 3.0
+v 16.2337 -13.363063 3.0
+v 14.270746 -14.53876 3.0
+v 14.139029 -14.698969 3.0
+v 14.300143 -14.574265 3.0
+v 16.623133 -12.171602 3.0
+v 16.323135 -12.47264 3.0
+v 16.416037 -12.457893 3.0
+v 16.499805 -12.415101 3.0
+v 16.566206 -12.348472 3.0
+v 16.608707 -12.264556 3.0
+v 13.794 -14.915328 3.0
+v 12.935629 -16.442635 3.0
+v 15.292789 -13.076025 3.0
+v 12.051743 -16.279356 3.0
+v 12.094535 -16.363125 3.0
+v 12.161164 -16.429523 3.0
+v 12.036996 -16.186453 3.0
+v 12.24508 -16.472025 3.0
+v 12.338034 -16.486452 3.0
+v 16.579317 -11.574008 3.0
+v 15.363626 -12.47264 3.0
+v 15.383773 -12.679064 3.0
+v 15.409519 -12.47696 3.0
+v 13.855247 -13.472053 3.0
+v 13.323159 -13.918528 3.0
+v 13.970071 -14.81282 3.0
+v 11.18912 -16.007809 3.0
+v 10.988955 -16.211779 3.0
+v 11.077347 -16.167559 3.0
+v 11.146573 -16.097017 3.0
+v 11.830572 -15.247091 3.0
+v 12.032677 -15.272838 3.0
+v 12.036996 -15.226944 3.0
+v 14.202544 -12.870518 3.0
+v 15.344807 -12.87904 3.0
+v 10.794086 -16.205425 3.0
+v 10.89099 -16.224873 3.0
+v 12.670455 -14.156093 3.0
+v 14.323159 -12.186477 3.0
+v 10.250258 -15.953848 3.0
+v 11.433611 -15.156107 3.0
+v 15.9203 -10.253279 3.0
+v 16.191433 -10.343596 3.0
+v 16.112902 -10.283585 3.0
+v 16.019131 -10.252349 3.0
+v 11.975863 -14.156093 3.0
+v 11.630596 -15.208125 3.0
+v 15.827134 -10.286274 3.0
+v 16.452854 -10.988305 3.0
+v 16.246201 -10.42587 3.0
+v 15.052011 -10.715636 3.0
+v 14.202544 -11.502437 3.0
+v 9.746682 -15.629116 3.0
+v 11.323159 -13.918528 3.0
+v 14.835651 -10.370607 3.0
+v 13.855247 -10.900902 3.0
+v 14.949503 -10.539565 3.0
+v 9.970876 -14.134064 3.0
+v 10.79107 -13.472053 3.0
+v 9.2924 -14.812539 3.0
+v 9.237137 -14.888659 3.0
+v 9.208161 -14.978151 3.0
+v 9.208324 -15.072216 3.0
+v 9.237609 -15.161608 3.0
+v 9.293136 -15.237535 3.0
+v 9.810667 -14.002347 3.0
+v 9.93537 -14.163461 3.0
+v 13.323159 -10.454426 3.0
+v 14.899636 -8.743837 3.0
+v 9.696815 -13.833388 3.0
+v 9.594308 -13.657317 3.0
+v 10.443774 -12.870518 3.0
+v 8.454885 -14.029358 3.0
+v 8.533417 -14.08937 3.0
+v 8.627187 -14.120605 3.0
+v 13.212707 -9.216846 3.0
+v 14.396059 -8.419106 3.0
+v 12.670455 -10.216862 3.0
+v 8.400117 -13.947084 3.0
+v 8.726018 -14.119675 3.0
+v 8.819183 -14.086679 3.0
+v 13.015722 -9.164829 3.0
+v 12.815745 -9.125863 3.0
+v 13.457197 -8.365146 3.0
+v 13.852231 -8.16753 3.0
+v 13.755328 -8.148081 3.0
+v 13.499744 -8.275937 3.0
+v 13.657364 -8.161176 3.0
+v 13.568971 -8.205395 3.0
+v 12.609323 -9.146009 3.0
+v 11.975863 -10.216862 3.0
+v 12.613642 -9.100117 3.0
+v 8.193463 -13.384648 3.0
+v 9.282692 -11.900313 3.0
+v 10.323159 -12.186477 3.0
+v 10.443774 -11.502437 3.0
+v 9.262545 -11.693891 3.0
+v 9.236798 -11.895994 3.0
+v 8.067001 -12.798946 3.0
+v 9.301511 -11.493914 3.0
+v 9.353529 -11.296929 3.0
+v 10.79107 -10.900902 3.0
+v 10.852319 -9.457625 3.0
+v 11.323159 -10.454426 3.0
+v 10.676248 -9.560133 3.0
+v 8.323183 -11.900313 3.0
+v 8.023185 -12.201351 3.0
+v 10.375572 -9.834194 3.0
+v 12.308285 -7.886503 3.0
+v 12.609323 -8.186501 3.0
+v 12.594575 -8.093598 3.0
+v 12.551784 -8.00983 3.0
+v 12.485154 -7.94343 3.0
+v 12.401237 -7.900928 3.0
+v 10.50729 -9.673985 3.0
+v 8.230281 -11.915061 3.0
+v 10.346175 -9.798689 3.0
+v 8.146512 -11.957852 3.0
+v 8.080112 -12.024482 3.0
+v 8.03761 -12.108398 3.0
+v 11.71069 -7.930319 3.0
+v 8.342076 -10.940665 3.0
+v 8.412619 -11.009892 3.0
+v 8.501828 -11.052439 3.0
+v 11.124988 -8.056782 3.0
+v 10.422956 -8.682502 3.0
+v 8.304212 -10.657405 3.0
+v 8.284762 -10.754308 3.0
+v 8.297858 -10.852272 3.0
+v 10.38903 -8.490504 3.0
+v 10.389961 -8.589335 3.0
+v 10.562551 -8.263434 3.0
+v 10.480278 -8.318203 3.0
+v 10.420266 -8.396734 3.0
+v 8.555788 -10.113577 3.0
+v 8.88052 -9.61 3.0
+v 9.348028 -9.100926 3.0
+v 9.620977 -9.100454 3.0
+v 9.531486 -9.07148 3.0
+v 9.43742 -9.071642 3.0
+v 9.2721 -9.156454 3.0
+v 9.697097 -9.155719 3.0
+v 9.262545 -11.693891 0.0
+v 9.262545 -11.693891 3.0
+v 9.236798 -11.895994 0.0
+v 9.236798 -11.895994 3.0
+v 8.501828 -11.052439 0.0
+v 8.501828 -11.052439 3.0
+v 9.2721 -9.156454 0.0
+v 8.88052 -9.61 0.0
+v 9.2721 -9.156454 3.0
+v 8.88052 -9.61 3.0
+v 8.304212 -10.657405 0.0
+v 8.304212 -10.657405 3.0
+v 10.375572 -9.834194 0.0
+v 10.375572 -9.834194 3.0
+v 9.746682 -15.629116 0.0
+v 9.746682 -15.629116 3.0
+v 10.250258 -15.953848 0.0
+v 10.250258 -15.953848 3.0
+v 10.794086 -16.205425 0.0
+v 10.794086 -16.205425 3.0
+v 11.18912 -16.007809 0.0
+v 11.18912 -16.007809 3.0
+v 11.630596 -15.208125 0.0
+v 11.630596 -15.208125 3.0
+v 12.032677 -15.272838 0.0
+v 12.032677 -15.272838 3.0
+v 12.308285 -7.886503 0.0
+v 12.308285 -7.886503 3.0
+v 14.083766 -16.10952 0.0
+v 14.083766 -16.10952 3.0
+v 13.212707 -9.216846 0.0
+v 13.015722 -9.164829 0.0
+v 13.212707 -9.216846 3.0
+v 13.015722 -9.164829 3.0
+v 12.815745 -9.125863 0.0
+v 12.815745 -9.125863 3.0
+v 12.613642 -9.100117 0.0
+v 12.613642 -9.100117 3.0
+v 13.457197 -8.365146 0.0
+v 13.457197 -8.365146 3.0
+v 15.353182 -9.135418 0.0
+v 14.899636 -8.743837 0.0
+v 15.353182 -9.135418 3.0
+v 14.899636 -8.743837 3.0
+v 14.396059 -8.419106 0.0
+v 14.396059 -8.419106 3.0
+v 13.852231 -8.16753 0.0
+v 13.852231 -8.16753 3.0
+v 14.270746 -14.53876 0.0
+v 14.270746 -14.53876 3.0
+v 15.374218 -15.2165 0.0
+v 15.374218 -15.2165 3.0
+v 16.342106 -13.715549 0.0
+v 16.342106 -13.715549 3.0
+v 16.144489 -13.320516 3.0
+v 16.144489 -13.320516 0.0
+v 15.292789 -13.076025 3.0
+v 15.292789 -13.076025 0.0
+v 15.383773 -12.679064 0.0
+v 15.383773 -12.679064 3.0
+v 15.409519 -12.47696 0.0
+v 15.409519 -12.47696 3.0
+v 16.246201 -10.42587 0.0
+v 16.246201 -10.42587 3.0
+v 16.323135 -12.47264 3.0
+v 16.323135 -12.47264 0.0
+vn 0.7071062922477722 -0.7071072459220886 0.0
+vn 0.7071062922477722 -0.7071072459220886 0.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 1.6556079370133655e-33 -1.156807388557571e-33 -1.0
+vn 1.22361626835851e-31 -1.0060126332656458e-31 -1.0
+vn 2.510308388087793e-31 9.597861415954068e-32 -1.0
+vn 8.169752741392895e-32 -1.403269773631687e-31 -1.0
+vn 9.034409357785719e-32 -1.3407220718727384e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -9.461585180368889e-32 3.4829932879694904e-31 -1.0
+vn -1.4562088670175793e-31 -1.4212195429813846e-32 -1.0
+vn -1.5266979735118132e-31 4.0314980538463706e-32 -1.0
+vn -1.527485319627994e-31 2.97637755715775e-32 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 2.5808766053518373e-31 -5.700879588776107e-32 -1.0
+vn 6.166397686094398e-32 -3.476838634647455e-31 -1.0
+vn -6.700549959821326e-32 -2.4362670552148093e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -1.034779566117839e-31 -3.918555322350297e-31 -1.0
+vn -7.798498123814218e-32 -4.0022201923745925e-31 -1.0
+vn 1.6515589834561565e-31 -4.089041734928586e-31 -1.0
+vn 4.0603796561724865e-32 -4.1601473882098265e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -4.510066195573903e-31 -7.998892286512174e-32 -1.0
+vn 1.8848515890011405e-31 6.853171561904124e-31 -1.0
+vn 0.0 0.0 -1.0
+vn -5.852307358796209e-32 -4.162319701770146e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -4.0427578203593096e-31 -1.3044173990453324e-31 -1.0
+vn -3.125301171562296e-31 -3.8013383170704806e-31 -1.0
+vn -3.8937566233276095e-31 -2.266922752947779e-31 -1.0
+vn -3.797362089879389e-31 -2.5588393776581017e-31 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn -3.062798726335854e-31 -4.383438182521404e-31 -1.0
+vn -3.1630260766643653e-31 -3.7546053636591897e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -3.125301641760036e-31 -3.8013437243444944e-31 -1.0
+vn -3.163030073345158e-31 -3.754595724605513e-31 -1.0
+vn 0.0 0.0 -1.0
+vn -3.797370553438715e-31 -2.5588302088021653e-31 -1.0
+vn -4.042762522336713e-31 -1.3044137550128448e-31 -1.0
+vn -3.8937610902061426e-31 -2.2669248688376103e-31 -1.0
+vn 0.0 0.0 -1.0
+vn -3.062800372027945e-31 -4.383440533510106e-31 -1.0
+vn 0.0 0.0 -1.0
+vn -5.852238592376686e-32 -4.162319701770146e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -1.034765225086759e-31 -3.918558613734479e-31 -1.0
+vn -7.798462271236518e-32 -4.002220662572333e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 4.060201568778337e-32 -4.160145037221125e-31 -1.0
+vn 1.6515593361044618e-31 -4.089040324335365e-31 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -2.431203025551467e-31 2.7031023920605073e-31 -1.0
+vn -2.847381393186084e-31 1.1899131996283439e-31 -1.0
+vn -4.510067135969384e-31 -7.998895225248051e-32 -1.0
+vn 0.0 -0.0 -1.0
+vn -1.4562065160288776e-31 -1.4212897787688463e-32 -1.0
+vn 0.0 0.0 -1.0
+vn -1.5274836739359028e-31 2.976353459523558e-32 -1.0
+vn -1.526696327819722e-31 4.031587685290621e-32 -1.0
+vn -9.461588706851941e-32 3.4829921124751395e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 6.16639239636982e-32 -3.476835578362143e-31 -1.0
+vn 2.5808794265382793e-31 -5.700866070591072e-32 -1.0
+vn 8.169753916887246e-32 -1.403269773631687e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 1.655609406381304e-33 -1.1568084905835249e-33 -1.0
+vn 2.5103046265058705e-31 9.597824387882017e-32 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 9.034409945532894e-32 -1.3407224245210437e-31 -1.0
+vn 1.2236199123909975e-31 -1.0060091067825934e-31 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -0.0 -0.0 -1.0
+vn 0.0 -0.0 -1.0
+vn -0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn -0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.0 0.0 -1.0
+vn 0.8092203140258789 -0.5875054001808167 0.0
+vn 0.8092203140258789 -0.5875054001808167 0.0
+vn 0.9513781666755676 -0.30802515149116516 0.0
+vn 0.9513781666755676 -0.30802515149116516 0.0
+vn 0.9999985098838806 0.0017235236009582877 0.0
+vn 0.9999985098838806 0.0017235236009582877 0.0
+vn 0.9503049254417419 0.31132060289382935 0.0
+vn 0.807181715965271 0.5903030037879944 0.0
+vn 0.9503049254417419 0.31132060289382935 0.0
+vn 0.807181715965271 0.5903030037879944 0.0
+vn -0.6377289891242981 0.770260751247406 0.0
+vn -0.6377289891242981 0.770260751247406 0.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn -0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 -0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 0.0 1.0
+vn 0.0 1.0 -0.0
+vn 0.0 1.0 0.0
+vn -0.156780406832695 0.987633466720581 0.0
+vn -0.156780406832695 0.987633466720581 0.0
+vn -0.4549102783203125 0.8905373215675354 0.0
+vn -0.4549102783203125 0.8905373215675354 0.0
+vn -0.7083274126052856 0.7058840394020081 0.0
+vn -0.8921015858650208 0.45183470845222473 0.0
+vn -0.7083274126052856 0.7058840394020081 0.0
+vn -0.8921015858650208 0.45183470845222473 0.0
+vn -0.9881713390350342 0.1533537060022354 0.0
+vn -0.9881713390350342 0.1533537060022354 0.0
+vn -0.09369895607233047 -0.9956005215644836 0.0
+vn -0.09369895607233047 -0.9956005215644836 0.0
+vn -0.9973227381706238 -0.07312518358230591 0.0
+vn -0.9973227381706238 -0.07312518358230591 0.0
+vn -0.9774748682975769 -0.21105173230171204 0.0
+vn -0.9774748682975769 -0.21105173230171204 0.0
+vn -0.9386457800865173 -0.3448827564716339 0.0
+vn -0.9386457800865173 -0.3448827564716339 0.0
+vn -0.9668564796447754 0.25532037019729614 0.0
+vn -0.9668564796447754 0.25532037019729614 0.0
+vn -0.9815401434898376 0.19125641882419586 0.0
+vn -0.9815401434898376 0.19125641882419586 0.0
+vn -0.99198317527771 0.12637053430080414 0.0
+vn -0.99198317527771 0.12637053430080414 0.0
+vn -0.8324256539344788 -0.5541366934776306 -0.0
+vn -0.8324256539344788 -0.5541366934776306 0.0
+vn -0.607185423374176 -0.7945601940155029 -0.0
+vn -0.607185423374176 -0.7945601940155029 0.0
+vn -0.31603673100471497 -0.9487470388412476 -0.0
+vn -0.31603673100471497 -0.9487470388412476 0.0
+vn 0.009417521767318249 -0.9999555945396423 0.0
+vn 0.009417521767318249 -0.9999555945396423 0.0
+vn 0.333839476108551 -0.9426299929618835 0.0
+vn 0.333839476108551 -0.9426299929618835 0.0
+vn -0.27591821551322937 -0.961181104183197 0.0
+vn -0.27591821551322937 -0.961181104183197 0.0
+vn 0.48455384373664856 -0.8747614026069641 0.0
+vn 0.48455384373664856 -0.8747614026069641 0.0
+vn -0.9804468750953674 0.196784108877182 0.0
+vn -0.9804468750953674 0.196784108877182 0.0
+vn -0.9911828637123108 -0.13250121474266052 -0.0
+vn -0.9911828637123108 -0.13250121474266052 0.0
+vn -0.8943403363227844 -0.4473872780799866 -0.0
+vn -0.8943403363227844 -0.4473872780799866 0.0
+vn -0.7004175782203674 -0.7137333154678345 -0.0
+vn -0.7004175782203674 -0.7137333154678345 0.0
+vn -0.43048182129859924 -0.9025991559028625 -0.0
+vn -0.43048182129859924 -0.9025991559028625 0.0
+vn -0.8642070889472961 -0.5031362771987915 0.0
+vn -0.8642070889472961 -0.5031362771987915 0.0
+vn -0.8292934894561768 -0.5588133335113525 0.0
+vn -0.8292934894561768 -0.5588133335113525 0.0
+vn -0.7907944917678833 -0.6120817065238953 0.0
+vn -0.7907944917678833 -0.6120817065238953 0.0
+vn -0.7569202780723572 0.6535071730613708 0.0
+vn -0.7569202780723572 0.6535071730613708 0.0
+vn -0.8404157757759094 0.5419421792030334 0.0
+vn -0.8404157757759094 0.5419421792030334 0.0
+vn -0.9075914621353149 0.41985446214675903 0.0
+vn -0.9075914621353149 0.41985446214675903 0.0
+vn 0.6377391815185547 -0.7702523469924927 0.0
+vn 0.6377391815185547 -0.7702523469924927 0.0
+vn 0.5875101685523987 0.8092167377471924 0.0
+vn 0.5875101685523987 0.8092167377471924 0.0
+vn 0.30802515149116516 0.9513781666755676 0.0
+vn 0.30802515149116516 0.9513781666755676 0.0
+vn -0.0017235236009582877 0.9999985098838806 0.0
+vn -0.0017235236009582877 0.9999985098838806 0.0
+vn -0.3113175928592682 0.9503059387207031 0.0
+vn -0.5903078317642212 0.8071781396865845 0.0
+vn -0.3113175928592682 0.9503059387207031 0.0
+vn -0.5903078317642212 0.8071781396865845 0.0
+vn -0.7071068286895752 0.7071068286895752 0.0
+vn -0.7071068286895752 0.7071068286895752 0.0
+vn 0.7071068286895752 0.7071068286895752 -0.0
+vn 0.7071068286895752 0.7071068286895752 0.0
+vn -0.8092215061187744 0.5875035524368286 0.0
+vn -0.8092215061187744 0.5875035524368286 0.0
+vn -0.95137619972229 0.3080313503742218 0.0
+vn -0.95137619972229 0.3080313503742218 0.0
+vn -0.9999985098838806 -0.0017336795572191477 -0.0
+vn -0.9999985098838806 -0.0017336795572191477 0.0
+vn -0.9503059387207031 -0.3113175928592682 -0.0
+vn -0.9503059387207031 -0.3113175928592682 0.0
+vn -0.807183027267456 -0.5903012156486511 -0.0
+vn -0.807183027267456 -0.5903012156486511 0.0
+vn -0.7702523469924927 -0.6377391815185547 0.0
+vn -0.7702523469924927 -0.6377391815185547 0.0
+vn -0.6535063982009888 -0.7569209933280945 0.0
+vn -0.6535063982009888 -0.7569209933280945 0.0
+vn -0.5419428944587708 -0.8404152989387512 0.0
+vn -0.5419428944587708 -0.8404152989387512 0.0
+vn -0.4198557734489441 -0.9075908660888672 0.0
+vn -0.4198557734489441 -0.9075908660888672 0.0
+vn -0.5031362771987915 0.8642070889472961 0.0
+vn -0.5031362771987915 0.8642070889472961 0.0
+vn -0.5588154196739197 0.8292919993400574 0.0
+vn -0.5588154196739197 0.8292919993400574 0.0
+vn -0.6120823621749878 0.7907940149307251 0.0
+vn -0.6120823621749878 0.7907940149307251 0.0
+vn -0.19676367938518524 -0.9804509282112122 -0.0
+vn -0.19676367938518524 -0.9804509282112122 0.0
+vn 0.13248226046562195 -0.9911853671073914 0.0
+vn 0.13248226046562195 -0.9911853671073914 0.0
+vn 0.4474065601825714 -0.8943306803703308 0.0
+vn 0.4474065601825714 -0.8943306803703308 0.0
+vn 0.7137285470962524 -0.7004223465919495 0.0
+vn 0.9025974273681641 -0.4304855763912201 0.0
+vn 0.7137285470962524 -0.7004223465919495 0.0
+vn 0.9025974273681641 -0.4304855763912201 0.0
+vn -0.8747612237930298 -0.48455432057380676 0.0
+vn -0.8747612237930298 -0.48455432057380676 0.0
+vn 0.9611812233924866 -0.2759179472923279 0.0
+vn 0.9611812233924866 -0.2759179472923279 0.0
+vn -0.5541366934776306 0.8324256539344788 0.0
+vn -0.5541366934776306 0.8324256539344788 0.0
+vn -0.7945601940155029 0.607185423374176 0.0
+vn -0.7945601940155029 0.607185423374176 0.0
+vn -0.9487470388412476 0.31603673100471497 0.0
+vn -0.9999555945396423 -0.009417521767318249 -0.0
+vn -0.9487470388412476 0.31603673100471497 0.0
+vn -0.9999555945396423 -0.009417521767318249 -0.0
+vn -0.9426310062408447 -0.3338364362716675 -0.0
+vn -0.9426310062408447 -0.3338364362716675 0.0
+vn -0.2553192377090454 -0.966856837272644 0.0
+vn -0.2553192377090454 -0.966856837272644 0.0
+vn -0.1912572830915451 -0.9815399646759033 0.0
+vn -0.1912572830915451 -0.9815399646759033 0.0
+vn -0.12636993825435638 -0.99198317527771 0.0
+vn -0.12636993825435638 -0.99198317527771 0.0
+vn -0.07312439382076263 0.9973228573799133 0.0
+vn -0.07312439382076263 0.9973228573799133 0.0
+vn -0.2110532522201538 0.977474570274353 0.0
+vn -0.2110532522201538 0.977474570274353 0.0
+vn -0.3448813557624817 0.9386462569236755 0.0
+vn -0.3448813557624817 0.9386462569236755 0.0
+vn 0.9956005215644836 -0.09369895607233047 0.0
+vn 0.9956005215644836 -0.09369895607233047 0.0
+vn 0.987633466720581 0.156780406832695 0.0
+vn 0.987633466720581 0.156780406832695 0.0
+vn 0.8905373215675354 0.4549102783203125 0.0
+vn 0.8905373215675354 0.4549102783203125 0.0
+vn 0.7058815360069275 0.708329975605011 0.0
+vn 0.7058815360069275 0.708329975605011 0.0
+vn 0.4518307149410248 0.8921036720275879 0.0
+vn 0.4518307149410248 0.8921036720275879 0.0
+vn 0.15335866808891296 0.9881705641746521 0.0
+vn 0.15335866808891296 0.9881705641746521 0.0
+vn -1.0 0.0 0.0
+vn -1.0 -0.0 0.0
+vn 1.0 0.0 0.0
+vn 1.0 -0.0 0.0
+vn -0.9876353740692139 -0.15676896274089813 -0.0
+vn -0.9876353740692139 -0.15676896274089813 0.0
+vn -0.8905332088470459 -0.4549182951450348 -0.0
+vn -0.8905332088470459 -0.4549182951450348 0.0
+vn -0.7058789730072021 -0.7083324790000916 -0.0
+vn -0.45183074474334717 -0.8921036124229431 -0.0
+vn -0.7058789730072021 -0.7083324790000916 0.0
+vn -0.45183074474334717 -0.8921036124229431 -0.0
+vn -0.15337197482585907 -0.9881685376167297 -0.0
+vn -0.15337197482585907 -0.9881685376167297 0.0
+vn -0.9956004619598389 0.09370089322328568 0.0
+vn -0.9956004619598389 0.09370089322328568 0.0
+vn 0.07312676310539246 -0.9973226189613342 0.0
+vn 0.07312676310539246 -0.9973226189613342 0.0
+vn 0.2110532522201538 -0.977474570274353 0.0
+vn 0.2110532522201538 -0.977474570274353 0.0
+vn 0.34488049149513245 -0.9386466145515442 0.0
+vn 0.34488049149513245 -0.9386466145515442 0.0
+vn 0.25531598925590515 0.9668576121330261 -0.0
+vn 0.25531598925590515 0.9668576121330261 0.0
+vn 0.19125641882419586 0.9815401434898376 0.0
+vn 0.19125641882419586 0.9815401434898376 -0.0
+vn 0.12637053430080414 0.99198317527771 0.0
+vn 0.12637053430080414 0.99198317527771 -0.0
+vn 0.5541388988494873 -0.8324241638183594 0.0
+vn 0.5541388988494873 -0.8324241638183594 0.0
+vn 0.7945613265037537 -0.6071839928627014 0.0
+vn 0.7945613265037537 -0.6071839928627014 0.0
+vn 0.9487479329109192 -0.31603381037712097 0.0
+vn 0.9999557733535767 0.009407875128090382 0.0
+vn 0.9487479329109192 -0.31603381037712097 0.0
+vn 0.9426299929618835 0.333839476108551 0.0
+vn 0.9999557733535767 0.009407875128090382 0.0
+vn 0.9426299929618835 0.333839476108551 0.0
+vn -0.961181104183197 0.27591821551322937 0.0
+vn -0.961181104183197 0.27591821551322937 0.0
+vn 0.8747614026069641 0.48455384373664856 -0.0
+vn 0.8747614026069641 0.48455384373664856 0.0
+vn 0.196784108877182 0.9804468750953674 0.0
+vn 0.196784108877182 0.9804468750953674 0.0
+vn -0.13249173760414124 0.9911840558052063 0.0
+vn -0.13249173760414124 0.9911840558052063 0.0
+vn -0.447394996881485 0.894336462020874 0.0
+vn -0.447394996881485 0.894336462020874 0.0
+vn -0.7137333154678345 0.7004175782203674 0.0
+vn -0.9025974273681641 0.4304855763912201 0.0
+vn -0.7137333154678345 0.7004175782203674 0.0
+vn -0.9025974273681641 0.4304855763912201 0.0
+vn 0.5031362771987915 -0.8642070889472961 0.0
+vn 0.5031362771987915 -0.8642070889472961 0.0
+vn 0.5588154196739197 -0.8292919993400574 0.0
+vn 0.5588154196739197 -0.8292919993400574 0.0
+vn 0.6120794415473938 -0.7907962799072266 0.0
+vn 0.6120794415473938 -0.7907962799072266 0.0
+vn 0.6535071730613708 0.7569202780723572 -0.0
+vn 0.6535071730613708 0.7569202780723572 0.0
+vn 0.5419410467147827 0.8404164910316467 0.0
+vn 0.5419410467147827 0.8404164910316467 -0.0
+vn 0.41985446214675903 0.9075914621353149 0.0
+vn 0.41985446214675903 0.9075914621353149 -0.0
+vn 0.7702523469924927 0.6377391815185547 0.0
+vn 0.7702523469924927 0.6377391815185547 -0.0
+vn -0.7071068286895752 -0.7071068286895752 0.0
+vn -0.7071068286895752 -0.7071068286895752 0.0
+vn -0.5875035524368286 -0.8092215061187744 -0.0
+vn -0.5875035524368286 -0.8092215061187744 0.0
+vn -0.30803436040878296 -0.9513753056526184 -0.0
+vn -0.30803436040878296 -0.9513753056526184 0.0
+vn 0.0017336619785055518 -0.9999985098838806 0.0
+vn 0.0017336619785055518 -0.9999985098838806 0.0
+vn 0.31132060289382935 -0.9503049254417419 0.0
+vn 0.31132060289382935 -0.9503049254417419 0.0
+vn 0.5902964472770691 -0.8071866035461426 0.0
+vn 0.5902964472770691 -0.8071866035461426 0.0
+vn 0.7569209933280945 -0.6535063982009888 0.0
+vn 0.7569209933280945 -0.6535063982009888 0.0
+vn 0.8404152989387512 -0.5419428944587708 0.0
+vn 0.8404152989387512 -0.5419428944587708 0.0
+vn 0.9075920581817627 -0.419853150844574 0.0
+vn 0.9075920581817627 -0.419853150844574 0.0
+vn 0.8642070889472961 0.5031362771987915 -0.0
+vn 0.8642070889472961 0.5031362771987915 0.0
+vn 0.8292919993400574 0.5588154196739197 0.0
+vn 0.8292919993400574 0.5588154196739197 -0.0
+vn 0.7907962799072266 0.6120794415473938 0.0
+vn 0.7907962799072266 0.6120794415473938 -0.0
+vn 0.9804472327232361 -0.19678224623203278 0.0
+vn 0.9804472327232361 -0.19678224623203278 0.0
+vn 0.9911828637123108 0.13250121474266052 0.0
+vn 0.9911828637123108 0.13250121474266052 0.0
+vn 0.8943384289741516 0.4473911225795746 0.0
+vn 0.8943384289741516 0.4473911225795746 0.0
+vn 0.7004223465919495 0.7137285470962524 0.0
+vn 0.4304780960083008 0.9026010036468506 0.0
+vn 0.7004223465919495 0.7137285470962524 0.0
+vn 0.4304780960083008 0.9026010036468506 0.0
+vn -0.48455432057380676 0.8747612237930298 0.0
+vn -0.48455432057380676 0.8747612237930298 0.0
+vn 0.27591851353645325 0.9611810445785522 0.0
+vn 0.27591851353645325 0.9611810445785522 0.0
+vn 0.8324301242828369 0.5541300177574158 0.0
+vn 0.8324301242828369 0.5541300177574158 0.0
+vn 0.607185423374176 0.7945601940155029 0.0
+vn 0.607185423374176 0.7945601940155029 0.0
+vn 0.31603381037712097 0.9487479329109192 0.0
+vn 0.31603381037712097 0.9487479329109192 0.0
+vn -0.00940796546638012 0.9999557733535767 0.0
+vn -0.3338364362716675 0.9426310062408447 0.0
+vn -0.00940796546638012 0.9999557733535767 0.0
+vn -0.3338364362716675 0.9426310062408447 0.0
+vn 0.9668579697608948 -0.25531482696533203 0.0
+vn 0.9668579697608948 -0.25531482696533203 0.0
+vn 0.9815399646759033 -0.1912572830915451 0.0
+vn 0.9815399646759033 -0.1912572830915451 0.0
+vn 0.99198317527771 -0.12637053430080414 0.0
+vn 0.99198317527771 -0.12637053430080414 0.0
+vn 0.9973229169845581 0.07312371581792831 -0.0
+vn 0.9973229169845581 0.07312371581792831 0.0
+vn 0.9774746298789978 0.21105293929576874 0.0
+vn 0.9774746298789978 0.21105293929576874 -0.0
+vn 0.938645601272583 0.3448832929134369 0.0
+vn 0.938645601272583 0.3448832929134369 -0.0
+vn 0.09372138977050781 0.9955983757972717 0.0
+vn 0.09372138977050781 0.9955983757972717 -0.0
+vn 0.15677209198474884 -0.9876347780227661 0.0
+vn 0.4549182951450348 -0.8905332088470459 0.0
+vn 0.15677209198474884 -0.9876347780227661 0.0
+vn 0.7083223462104797 -0.7058891654014587 0.0
+vn 0.4549182951450348 -0.8905332088470459 0.0
+vn 0.7083223462104797 -0.7058891654014587 0.0
+vn 0.8921036124229431 -0.45183074474334717 0.0
+vn 0.8921036124229431 -0.45183074474334717 0.0
+vn 0.9881715178489685 -0.15335217118263245 0.0
+vn 0.9881715178489685 -0.15335217118263245 0.0
+vn 0.0 -1.0 0.0
+vn 0.0 -1.0 0.0
+vn -0.9848076701164246 -0.17364856600761414 -0.0
+vn -0.9848076701164246 -0.17364856600761414 0.0
+vn -0.8660251498222351 -0.5000004768371582 0.0
+vn -0.8660251498222351 -0.5000004768371582 -0.0
+vn -0.6427884101867676 -0.7660438418388367 0.0
+vn -0.6427884101867676 -0.7660438418388367 -0.0
+vn -0.34201911091804504 -0.939693033695221 0.0
+vn -0.34201911091804504 -0.939693033695221 -0.0
+vn -0.0 -1.0 0.0
+vn -0.0 -1.0 -0.0
+vn 0.34201952815055847 -0.9396928548812866 0.0
+vn 0.34201952815055847 -0.9396928548812866 0.0
+vn 0.6427876353263855 -0.7660443186759949 0.0
+vn 0.6427876353263855 -0.7660443186759949 0.0
+vn 0.8660257458686829 -0.49999943375587463 0.0
+vn 0.8660257458686829 -0.49999943375587463 0.0
+vn 0.9848076701164246 -0.17364856600761414 0.0
+vn 0.9848076701164246 0.17364832758903503 -0.0
+vn 0.9848076701164246 -0.17364856600761414 0.0
+vn 0.9848076701164246 0.17364832758903503 0.0
+vn 0.8660257458686829 0.49999943375587463 0.0
+vn 0.8660257458686829 0.49999943375587463 0.0
+vn 0.6427868604660034 0.7660450339317322 0.0
+vn 0.34202075004577637 0.9396924376487732 -0.0
+vn 0.6427868604660034 0.7660450339317322 0.0
+vn 0.34202075004577637 0.9396924376487732 0.0
+vn 0.0 1.0 0.0
+vn -0.0 1.0 0.0
+vn -0.34202033281326294 0.9396926164627075 0.0
+vn -0.34202033281326294 0.9396926164627075 0.0
+vn -0.642787516117096 0.7660444378852844 0.0
+vn -0.642787516117096 0.7660444378852844 0.0
+vn -0.8660251498222351 0.5000004768371582 0.0
+vn -0.8660251498222351 0.5000004768371582 0.0
+vn -0.9848076701164246 0.17364832758903503 0.0
+vn -0.9848076701164246 0.17364832758903503 0.0
+f 1//1 2//1 3//1
+f 3//2 2//2 4//2
+f 5//3 6//3 7//3
+f 5//4 8//4 6//4
+f 9//5 8//5 5//5
+f 9//6 10//6 8//6
+f 9//7 5//7 11//7
+f 12//8 13//8 14//8
+f 12//9 15//9 13//9
+f 12//10 16//10 15//10
+f 12//11 17//11 16//11
+f 18//12 12//12 14//12
+f 19//13 20//13 21//13
+f 19//14 22//14 20//14
+f 23//15 19//15 21//15
+f 24//16 23//16 21//16
+f 24//17 21//17 25//17
+f 26//18 27//18 28//18
+f 29//19 30//19 31//19
+f 29//20 32//20 30//20
+f 33//21 32//21 29//21
+f 33//22 34//22 32//22
+f 35//23 18//23 36//23
+f 35//24 12//24 18//24
+f 37//25 38//25 39//25
+f 40//26 38//26 37//26
+f 41//27 24//27 25//27
+f 41//28 25//28 10//28
+f 42//29 38//29 40//29
+f 43//30 36//30 38//30
+f 43//31 38//31 42//31
+f 44//32 33//32 29//32
+f 45//33 46//33 47//33
+f 48//34 41//34 26//34
+f 49//35 26//35 28//35
+f 49//36 48//36 26//36
+f 49//37 50//37 35//37
+f 49//38 28//38 50//38
+f 51//39 52//39 53//39
+f 54//40 55//40 56//40
+f 57//41 41//41 48//41
+f 57//42 45//42 47//42
+f 57//43 58//43 41//43
+f 57//44 47//44 58//44
+f 59//45 60//45 61//45
+f 59//46 53//46 60//46
+f 59//47 51//47 53//47
+f 62//48 49//48 35//48
+f 62//49 35//49 55//49
+f 63//50 45//50 57//50
+f 64//51 65//51 66//51
+f 67//52 68//52 51//52
+f 67//53 51//53 59//53
+f 69//54 70//54 64//54
+f 69//55 64//55 66//55
+f 71//56 72//56 68//56
+f 71//57 54//57 72//57
+f 71//58 62//58 55//58
+f 71//59 55//59 54//59
+f 73//60 69//60 66//60
+f 73//61 66//61 74//61
+f 75//62 73//62 74//62
+f 75//63 74//63 44//63
+f 76//64 75//64 45//64
+f 76//65 45//65 63//65
+f 77//66 68//66 67//66
+f 78//67 71//67 68//67
+f 79//68 80//68 81//68
+f 82//69 83//69 84//69
+f 85//70 75//70 76//70
+f 85//71 79//71 81//71
+f 85//72 86//72 75//72
+f 85//73 81//73 86//73
+f 87//74 82//74 84//74
+f 88//75 87//75 84//75
+f 88//76 89//76 87//76
+f 90//77 91//77 92//77
+f 93//78 91//78 90//78
+f 94//79 91//79 93//79
+f 95//80 78//80 68//80
+f 95//81 96//81 78//81
+f 97//82 77//82 91//82
+f 97//83 91//83 94//83
+f 98//84 95//84 99//84
+f 98//85 96//85 95//85
+f 100//86 79//86 85//86
+f 101//87 88//87 84//87
+f 102//88 96//88 98//88
+f 103//89 104//89 96//89
+f 103//90 96//90 102//90
+f 105//91 106//91 107//91
+f 108//92 79//92 100//92
+f 108//93 109//93 101//93
+f 108//94 100//94 110//94
+f 111//95 112//95 113//95
+f 111//96 105//96 112//96
+f 111//97 106//97 105//97
+f 114//98 108//98 110//98
+f 115//99 114//99 110//99
+f 116//100 117//100 109//100
+f 116//101 109//101 108//101
+f 118//102 119//102 117//102
+f 120//103 117//103 116//103
+f 120//104 118//104 117//104
+f 120//105 116//105 121//105
+f 122//106 115//106 110//106
+f 122//107 110//107 123//107
+f 124//108 115//108 122//108
+f 125//109 103//109 106//109
+f 125//110 106//110 111//110
+f 126//111 127//111 128//111
+f 126//112 128//112 104//112
+f 126//113 104//113 103//113
+f 129//114 126//114 130//114
+f 129//115 127//115 126//115
+f 131//116 103//116 125//116
+f 132//117 127//117 129//117
+f 133//118 127//118 132//118
+f 133//119 134//119 127//119
+f 135//120 136//120 137//120
+f 138//121 135//121 137//121
+f 139//122 122//122 123//122
+f 139//123 123//123 140//123
+f 141//124 139//124 140//124
+f 142//125 131//125 143//125
+f 144//126 134//126 133//126
+f 144//127 140//127 134//127
+f 145//128 146//128 138//128
+f 145//129 138//129 137//129
+f 147//130 141//130 140//130
+f 147//131 140//131 144//131
+f 148//132 147//132 144//132
+f 149//133 150//133 142//133
+f 149//134 151//134 152//134
+f 149//135 143//135 151//135
+f 149//136 142//136 143//136
+f 153//137 145//137 137//137
+f 154//138 155//138 156//138
+f 157//139 153//139 139//139
+f 158//140 157//140 139//140
+f 159//141 154//141 160//141
+f 161//142 155//142 154//142
+f 161//143 154//143 159//143
+f 162//144 158//144 163//144
+f 164//145 157//145 158//145
+f 165//146 158//146 162//146
+f 165//147 164//147 158//147
+f 166//148 164//148 165//148
+f 167//149 133//149 155//149
+f 167//150 155//150 161//150
+f 168//151 169//151 170//151
+f 168//152 171//152 169//152
+f 172//153 133//153 167//153
+f 173//154 168//154 170//154
+f 173//155 170//155 172//155
+f 173//156 174//156 168//156
+f 142//157 126//157 131//157
+f 131//158 126//158 103//158
+f 170//159 144//159 172//159
+f 172//160 144//160 133//160
+f 137//161 122//161 153//161
+f 153//162 122//162 139//162
+f 84//163 79//163 101//163
+f 101//164 79//164 108//164
+f 29//165 45//165 44//165
+f 44//166 45//166 75//166
+f 9//167 26//167 10//167
+f 10//168 26//168 41//168
+f 43//169 55//169 36//169
+f 36//170 55//170 35//170
+f 97//171 95//171 77//171
+f 77//172 95//172 68//172
+f 175//173 84//173 83//173
+f 175//174 176//174 84//174
+f 177//175 83//175 82//175
+f 177//176 175//176 83//176
+f 178//177 82//177 87//177
+f 178//178 177//178 82//178
+f 179//179 87//179 89//179
+f 179//180 89//180 88//180
+f 179//181 178//181 87//181
+f 180//182 179//182 88//182
+f 80//183 79//183 181//183
+f 80//184 181//184 182//184
+f 183//185 184//185 185//185
+f 183//186 185//186 186//186
+f 187//187 183//187 186//187
+f 188//188 186//188 189//188
+f 188//189 187//189 186//189
+f 190//190 191//190 192//190
+f 193//191 194//191 195//191
+f 193//192 195//192 191//192
+f 193//193 191//193 190//193
+f 196//194 197//194 198//194
+f 199//195 194//195 193//195
+f 200//196 197//196 196//196
+f 200//197 201//197 197//197
+f 200//198 196//198 202//198
+f 200//199 202//199 203//199
+f 204//200 205//200 206//200
+f 207//201 208//201 209//201
+f 207//202 209//202 210//202
+f 207//203 210//203 211//203
+f 207//204 211//204 212//204
+f 213//205 214//205 199//205
+f 213//206 199//206 193//206
+f 215//207 189//207 201//207
+f 215//208 201//208 200//208
+f 216//209 217//209 218//209
+f 219//210 218//210 220//210
+f 219//211 220//211 221//211
+f 219//212 221//212 214//212
+f 219//213 216//213 218//213
+f 222//214 208//214 207//214
+f 223//215 224//215 225//215
+f 226//216 204//216 215//216
+f 227//217 205//217 204//217
+f 227//218 213//218 228//218
+f 227//219 228//219 205//219
+f 227//220 204//220 226//220
+f 229//221 230//221 231//221
+f 229//222 231//222 232//222
+f 233//223 234//223 235//223
+f 236//224 226//224 215//224
+f 236//225 224//225 223//225
+f 236//226 215//226 237//226
+f 236//227 237//227 224//227
+f 238//228 239//228 230//228
+f 238//229 230//229 229//229
+f 240//230 213//230 227//230
+f 240//231 235//231 213//231
+f 241//232 236//232 223//232
+f 242//233 229//233 243//233
+f 242//234 238//234 229//234
+f 244//235 245//235 246//235
+f 244//236 246//236 247//236
+f 248//237 243//237 249//237
+f 248//238 249//238 233//238
+f 248//239 233//239 235//239
+f 248//240 235//240 240//240
+f 250//241 245//241 244//241
+f 250//242 251//242 252//242
+f 250//243 252//243 245//243
+f 253//244 222//244 251//244
+f 253//245 251//245 250//245
+f 254//246 223//246 253//246
+f 254//247 241//247 223//247
+f 255//248 242//248 243//248
+f 256//249 243//249 248//249
+f 181//250 257//250 182//250
+f 258//251 257//251 181//251
+f 258//252 254//252 253//252
+f 258//253 253//253 259//253
+f 258//254 259//254 257//254
+f 179//255 175//255 177//255
+f 179//256 177//256 178//256
+f 180//257 175//257 179//257
+f 180//258 176//258 175//258
+f 260//259 243//259 256//259
+f 260//260 256//260 261//260
+f 262//261 263//261 264//261
+f 262//262 264//262 265//262
+f 262//263 265//263 266//263
+f 262//264 266//264 267//264
+f 262//265 267//265 255//265
+f 268//266 269//266 260//266
+f 268//267 260//267 261//267
+f 270//268 258//268 181//268
+f 271//269 176//269 180//269
+f 272//270 268//270 261//270
+f 273//271 261//271 274//271
+f 273//272 272//272 261//272
+f 275//273 276//273 277//273
+f 278//274 271//274 279//274
+f 278//275 270//275 181//275
+f 278//276 280//276 270//276
+f 281//277 277//277 282//277
+f 281//278 282//278 283//278
+f 281//279 275//279 277//279
+f 284//280 280//280 278//280
+f 285//281 280//281 284//281
+f 286//282 279//282 287//282
+f 286//283 287//283 288//283
+f 286//284 278//284 279//284
+f 289//285 286//285 288//285
+f 289//286 288//286 290//286
+f 291//287 289//287 290//287
+f 292//288 280//288 285//288
+f 292//289 293//289 280//289
+f 294//290 292//290 285//290
+f 295//291 283//291 273//291
+f 295//292 281//292 283//292
+f 296//293 297//293 298//293
+f 296//294 274//294 297//294
+f 296//295 273//295 274//295
+f 299//296 300//296 296//296
+f 299//297 296//297 298//297
+f 301//298 295//298 273//298
+f 302//299 299//299 298//299
+f 303//300 302//300 298//300
+f 303//301 298//301 304//301
+f 305//302 293//302 292//302
+f 305//303 306//303 293//303
+f 307//304 306//304 305//304
+f 308//305 309//305 301//305
+f 310//306 303//306 304//306
+f 310//307 304//307 306//307
+f 311//308 312//308 313//308
+f 311//309 313//309 314//309
+f 311//310 314//310 315//310
+f 311//311 315//311 316//311
+f 317//312 306//312 307//312
+f 317//313 310//313 306//313
+f 318//314 309//314 308//314
+f 319//315 310//315 317//315
+f 320//316 321//316 322//316
+f 320//317 322//317 309//317
+f 320//318 309//318 318//318
+f 323//319 312//319 311//319
+f 324//320 325//320 326//320
+f 327//321 305//321 323//321
+f 328//322 305//322 327//322
+f 329//323 330//323 331//323
+f 329//324 331//324 324//324
+f 329//325 324//325 326//325
+f 332//326 333//326 328//326
+f 334//327 328//327 327//327
+f 335//328 336//328 332//328
+f 335//329 328//329 334//329
+f 335//330 332//330 328//330
+f 337//331 326//331 303//331
+f 337//332 329//332 326//332
+f 338//333 337//333 303//333
+f 339//334 340//334 341//334
+f 339//335 341//335 342//335
+f 343//336 338//336 344//336
+f 343//337 340//337 339//337
+f 343//338 344//338 340//338
+f 296//339 308//339 301//339
+f 296//340 301//340 273//340
+f 260//341 262//341 255//341
+f 260//342 255//342 243//342
+f 235//343 219//343 214//343
+f 235//344 214//344 213//344
+f 204//345 188//345 189//345
+f 204//346 189//346 215//346
+f 223//347 208//347 222//347
+f 223//348 222//348 253//348
+f 181//349 176//349 271//349
+f 181//350 271//350 278//350
+f 292//351 312//351 323//351
+f 292//352 323//352 305//352
+f 310//353 344//353 338//353
+f 310//354 338//354 303//354
+f 126//355 142//355 296//355
+f 296//356 142//356 308//356
+f 318//357 142//357 150//357
+f 318//358 308//358 142//358
+f 320//359 150//359 149//359
+f 320//360 318//360 150//360
+f 321//361 149//361 152//361
+f 321//362 152//362 151//362
+f 321//363 320//363 149//363
+f 322//364 321//364 151//364
+f 309//365 151//365 143//365
+f 309//366 322//366 151//366
+f 130//367 126//367 296//367
+f 130//368 296//368 300//368
+f 143//369 131//369 309//369
+f 309//370 131//370 301//370
+f 301//371 125//371 295//371
+f 131//372 125//372 301//372
+f 295//373 111//373 281//373
+f 125//374 111//374 295//374
+f 133//375 132//375 303//375
+f 303//376 132//376 302//376
+f 302//377 345//377 346//377
+f 132//378 345//378 302//378
+f 346//379 347//379 348//379
+f 345//380 347//380 346//380
+f 275//381 111//381 113//381
+f 275//382 281//382 111//382
+f 276//383 113//383 112//383
+f 276//384 275//384 113//384
+f 277//385 112//385 105//385
+f 277//386 276//386 112//386
+f 282//387 105//387 107//387
+f 282//388 277//388 105//388
+f 283//389 107//389 106//389
+f 283//390 282//390 107//390
+f 349//391 133//391 350//391
+f 350//392 133//392 303//392
+f 106//393 103//393 283//393
+f 283//394 103//394 273//394
+f 330//395 161//395 159//395
+f 330//396 329//396 161//396
+f 331//397 159//397 160//397
+f 331//398 330//398 159//398
+f 324//399 160//399 154//399
+f 324//400 331//400 160//400
+f 325//401 154//401 156//401
+f 325//402 324//402 154//402
+f 326//403 156//403 155//403
+f 326//404 325//404 156//404
+f 103//405 102//405 273//405
+f 273//406 102//406 272//406
+f 272//407 98//407 268//407
+f 102//408 98//408 272//408
+f 268//409 99//409 269//409
+f 98//410 99//410 268//410
+f 351//411 352//411 353//411
+f 353//412 352//412 354//412
+f 354//413 167//413 337//413
+f 352//414 167//414 354//414
+f 337//415 355//415 356//415
+f 167//416 355//416 337//416
+f 99//417 95//417 260//417
+f 99//418 260//418 269//418
+f 340//419 170//419 169//419
+f 340//420 344//420 170//420
+f 341//421 169//421 171//421
+f 341//422 340//422 169//422
+f 342//423 171//423 168//423
+f 342//424 341//424 171//424
+f 339//425 168//425 174//425
+f 339//426 174//426 173//426
+f 339//427 342//427 168//427
+f 343//428 339//428 173//428
+f 95//429 97//429 260//429
+f 260//430 97//430 262//430
+f 357//431 170//431 358//431
+f 358//432 170//432 344//432
+f 263//433 97//433 94//433
+f 263//434 262//434 97//434
+f 264//435 94//435 93//435
+f 264//436 263//436 94//436
+f 265//437 93//437 90//437
+f 265//438 264//438 93//438
+f 266//439 90//439 92//439
+f 266//440 265//440 90//440
+f 267//441 92//441 91//441
+f 267//442 266//442 92//442
+f 148//443 144//443 310//443
+f 148//444 310//444 319//444
+f 91//445 359//445 267//445
+f 267//446 359//446 360//446
+f 360//447 361//447 362//447
+f 359//448 361//448 360//448
+f 362//449 363//449 364//449
+f 361//450 363//450 362//450
+f 139//451 141//451 305//451
+f 305//452 141//452 307//452
+f 307//453 147//453 317//453
+f 141//454 147//454 307//454
+f 317//455 148//455 319//455
+f 147//456 148//456 317//456
+f 239//457 59//457 61//457
+f 239//458 238//458 59//458
+f 230//459 61//459 60//459
+f 230//460 239//460 61//460
+f 231//461 60//461 53//461
+f 231//462 230//462 60//462
+f 232//463 53//463 52//463
+f 232//464 52//464 51//464
+f 232//465 231//465 53//465
+f 229//466 232//466 51//466
+f 158//467 139//467 328//467
+f 328//468 139//468 305//468
+f 365//469 68//469 366//469
+f 366//470 68//470 243//470
+f 335//471 164//471 166//471
+f 335//472 334//472 164//472
+f 336//473 166//473 165//473
+f 336//474 335//474 166//474
+f 332//475 165//475 162//475
+f 332//476 162//476 163//476
+f 332//477 336//477 165//477
+f 333//478 332//478 163//478
+f 328//479 163//479 158//479
+f 328//480 333//480 163//480
+f 68//481 367//481 243//481
+f 243//482 367//482 368//482
+f 368//483 54//483 233//483
+f 367//484 54//484 368//484
+f 233//485 369//485 370//485
+f 54//486 369//486 233//486
+f 371//487 153//487 372//487
+f 372//488 153//488 323//488
+f 323//489 157//489 327//489
+f 153//490 157//490 323//490
+f 327//491 164//491 334//491
+f 157//492 164//492 327//492
+f 56//493 55//493 235//493
+f 56//494 235//494 234//494
+f 313//495 137//495 136//495
+f 313//496 312//496 137//496
+f 314//497 136//497 135//497
+f 314//498 313//498 136//498
+f 315//499 135//499 138//499
+f 315//500 314//500 135//500
+f 316//501 138//501 146//501
+f 316//502 315//502 138//502
+f 311//503 146//503 145//503
+f 311//504 316//504 146//504
+f 55//505 43//505 235//505
+f 235//506 43//506 219//506
+f 122//507 137//507 292//507
+f 292//508 137//508 312//508
+f 216//509 43//509 42//509
+f 216//510 219//510 43//510
+f 217//511 42//511 40//511
+f 217//512 216//512 42//512
+f 218//513 40//513 37//513
+f 218//514 37//514 39//514
+f 218//515 217//515 40//515
+f 220//516 218//516 39//516
+f 221//517 39//517 38//517
+f 221//518 220//518 39//518
+f 124//519 122//519 292//519
+f 124//520 292//520 294//520
+f 38//521 36//521 221//521
+f 221//522 36//522 214//522
+f 214//523 18//523 199//523
+f 36//524 18//524 214//524
+f 199//525 373//525 374//525
+f 18//526 373//526 199//526
+f 375//527 376//527 377//527
+f 377//528 376//528 378//528
+f 378//529 379//529 380//529
+f 376//530 379//530 378//530
+f 380//531 381//531 382//531
+f 379//532 381//532 380//532
+f 195//533 14//533 13//533
+f 195//534 194//534 14//534
+f 191//535 13//535 15//535
+f 191//536 195//536 13//536
+f 192//537 15//537 16//537
+f 192//538 16//538 17//538
+f 192//539 191//539 15//539
+f 190//540 17//540 12//540
+f 190//541 192//541 17//541
+f 193//542 190//542 12//542
+f 383//543 375//543 384//543
+f 384//544 375//544 377//544
+f 12//545 35//545 193//545
+f 193//546 35//546 213//546
+f 288//547 117//547 119//547
+f 288//548 287//548 117//548
+f 290//549 119//549 118//549
+f 290//550 288//550 119//550
+f 291//551 118//551 120//551
+f 291//552 290//552 118//552
+f 289//553 120//553 121//553
+f 289//554 121//554 116//554
+f 289//555 291//555 120//555
+f 286//556 289//556 116//556
+f 35//557 50//557 213//557
+f 213//558 50//558 228//558
+f 228//559 28//559 205//559
+f 50//560 28//560 228//560
+f 205//561 27//561 206//561
+f 28//562 27//562 205//562
+f 385//563 386//563 387//563
+f 387//564 386//564 388//564
+f 388//565 389//565 390//565
+f 386//566 389//566 388//566
+f 390//567 391//567 392//567
+f 389//568 391//568 390//568
+f 27//569 26//569 204//569
+f 27//570 204//570 206//570
+f 393//571 9//571 394//571
+f 394//572 9//572 188//572
+f 187//573 9//573 11//573
+f 187//574 188//574 9//574
+f 183//575 11//575 5//575
+f 183//576 187//576 11//576
+f 184//577 5//577 7//577
+f 184//578 183//578 5//578
+f 185//579 7//579 6//579
+f 185//580 184//580 7//580
+f 186//581 6//581 8//581
+f 186//582 185//582 6//582
+f 395//583 10//583 396//583
+f 396//584 10//584 189//584
+f 189//585 25//585 201//585
+f 10//586 25//586 189//586
+f 201//587 397//587 398//587
+f 25//588 397//588 201//588
+f 75//589 86//589 253//589
+f 253//590 86//590 259//590
+f 259//591 81//591 257//591
+f 86//592 81//592 259//592
+f 257//593 80//593 182//593
+f 81//594 80//594 257//594
+f 198//595 21//595 20//595
+f 198//596 197//596 21//596
+f 196//597 20//597 22//597
+f 196//598 198//598 20//598
+f 202//599 22//599 19//599
+f 202//600 196//600 22//600
+f 203//601 19//601 23//601
+f 203//602 23//602 24//602
+f 203//603 202//603 19//603
+f 200//604 203//604 24//604
+f 73//605 75//605 250//605
+f 250//606 75//606 253//606
+f 399//607 400//607 401//607
+f 400//608 402//608 401//608
+f 245//609 66//609 65//609
+f 245//610 252//610 66//610
+f 246//611 65//611 64//611
+f 246//612 245//612 65//612
+f 247//613 64//613 70//613
+f 247//614 246//614 64//614
+f 244//615 70//615 69//615
+f 244//616 69//616 73//616
+f 244//617 247//617 70//617
+f 250//618 244//618 73//618
+f 402//619 58//619 401//619
+f 401//620 58//620 237//620
+f 237//621 403//621 404//621
+f 58//622 403//622 237//622
+f 404//623 405//623 406//623
+f 403//624 405//624 404//624
+f 33//625 44//625 207//625
+f 207//626 44//626 222//626
+f 222//627 74//627 251//627
+f 44//628 74//628 222//628
+f 251//629 407//629 408//629
+f 74//630 407//630 251//630
+f 46//631 45//631 223//631
+f 46//632 223//632 225//632
+f 208//633 29//633 31//633
+f 209//634 31//634 30//634
+f 209//635 208//635 31//635
+f 210//636 30//636 32//636
+f 210//637 209//637 30//637
+f 211//638 210//638 32//638
+f 212//639 32//639 34//639
+f 212//640 211//640 32//640
+f 207//641 34//641 33//641
+f 207//642 212//642 34//642
+f 223//643 45//643 409//643
+f 45//644 410//644 409//644
+f 241//645 254//645 63//645
+f 63//646 254//646 76//646
+f 76//647 258//647 85//647
+f 254//648 258//648 76//648
+f 85//649 270//649 100//649
+f 258//650 270//650 85//650
+f 100//651 280//651 110//651
+f 270//652 280//652 100//652
+f 110//653 293//653 123//653
+f 280//654 293//654 110//654
+f 123//655 306//655 140//655
+f 293//656 306//656 123//656
+f 140//657 304//657 134//657
+f 306//658 304//658 140//658
+f 134//659 298//659 127//659
+f 304//660 298//660 134//660
+f 127//661 297//661 128//661
+f 128//662 297//662 104//662
+f 298//663 297//663 127//663
+f 297//664 274//664 104//664
+f 104//665 261//665 96//665
+f 274//666 261//666 104//666
+f 96//667 256//667 78//667
+f 78//668 256//668 71//668
+f 261//669 256//669 96//669
+f 256//670 248//670 71//670
+f 71//671 240//671 62//671
+f 248//672 240//672 71//672
+f 240//673 227//673 62//673
+f 62//674 227//674 49//674
+f 227//675 226//675 49//675
+f 49//676 226//676 48//676
+f 48//677 226//677 57//677
+f 226//678 236//678 57//678
+f 236//679 241//679 57//679
+f 57//680 241//680 63//680
diff --git a/asset/icons/icon_about.svg b/asset/icons/icon_about.svg
new file mode 100644
index 0000000..68e9d73
--- /dev/null
+++ b/asset/icons/icon_about.svg
@@ -0,0 +1,62 @@
+
+
+
+
diff --git a/asset/map/map1-landscape.blend b/asset/map/map1-landscape.blend
index b6a1761..289d26b 100644
Binary files a/asset/map/map1-landscape.blend and b/asset/map/map1-landscape.blend differ
diff --git a/codetower-19.blend b/codetower-19.blend
new file mode 100644
index 0000000..46cd767
Binary files /dev/null and b/codetower-19.blend differ
diff --git a/ct.py b/ct.py
index 1bf8a0d..d218830 100644
--- a/ct.py
+++ b/ct.py
@@ -1,4 +1,5 @@
import importlib
+# import imp
import bge # Blender Game Engine (UPBGE)
import bpy # Blender
import aud # Sounds
@@ -10,6 +11,9 @@ import webbrowser
import threading # Multithreading
import xml.etree.ElementTree as ET # Creating/parsing XML file
+import ct_map1 as ct_map # waves script
+# import ct_cmd # user script (commands)
+
###############################################################################
# ct.py
# @title: the CodeTower game
@@ -30,14 +34,15 @@ import xml.etree.ElementTree as ET # Creating/parsing XML file
###############################################################################
# Dynamic import user file
-sys.setrecursionlimit(10**5) # Limite sur la récursivité (valeur par défaut : 1000) -> segfault de Blender
+sys.setrecursionlimit(10**6) # Limite sur la récursivité (valeur par défaut : 1000) -> segfault de Blender
importlib.invalidate_caches()
-ct_map = importlib.import_module('ct_map1') # waves script
-ct_cmd = importlib.import_module('ct_cmd') # user script (commands)
+# ct_map = importlib.import_module('ct_map1') # Waves script
+ct_cmd = importlib.import_module('ct_cmd') # User script (commands)
# UPBGE scene
scene = bge.logic.getCurrentScene()
eevee = bpy.context.scene.eevee
+fps_time=0.0
# Config file
# print (os.getcwd())
@@ -45,24 +50,26 @@ ct_config = ET.parse('ct_config.xml')
ct_config_tree = ct_config.getroot()
# Colors
-color_magenta = [0.800, 0.005, 0.315,1]
-color_orange = [0.799, 0.130, 0.063,1]
-color_white = [0.8, 0.8, 0.8, 1]
-color_yellow = [0.8, 0.619, 0.021, 1]
-color_black = [0, 0, 0, 1]
+color_magenta = (0.800, 0.005, 0.315,1)
+color_orange = (0.799, 0.130, 0.063,1)
+color_white = (0.8, 0.8, 0.8, 1)
+color_yellow = (0.8, 0.619, 0.021, 1)
+color_black = (0, 0, 0, 1)
-color_kaykit_black = [0.019, 0.032, 0.037, 1]
+color_kaykit_black = (0.019, 0.032, 0.037, 1)
-color_endbanner_bluelight = [0.361, 0.527, 0.716, 1]
-color_endbanner_bluedark = [0.130, 0.254, 0.407, 1]
+color_endbanner_bluelight = (0.361, 0.527, 0.716, 1)
+color_endbanner_bluedark = (0.130, 0.254, 0.407, 1)
-color_text = [0, 0, 0, 1] # Noir
-color_text_red = [0.799, 0.031, 0.038, 1]
+color_text = (0, 0, 0, 1) # Noir
+color_text_red = (0.799, 0.031, 0.038, 1)
+color_text_orange = (0.799, 0.176, 0.054, 1)
+color_text_yellow = (0.799, 0.617, 0.021, 1)
-color_cmd = [0.8, 0.8, 0.8, 1] # blanc
-color_cmd_hl = [0.8, 0.619, 0.021, 1] # jaune
-color_link = [0.024, 0.006, 0.8, 1] # bleu
-color_link_hl = [0.8, 0.005, 0.315, 1] # majenta
+color_cmd = (0.8, 0.8, 0.8, 1) # blanc
+color_cmd_hl = (0.8, 0.619, 0.021, 1) # jaune
+color_link = (0.024, 0.006, 0.8, 1) # bleu
+color_link_hl = (0.8, 0.005, 0.315, 1) # majenta
# Sounds
audiodev = aud.Device()
@@ -126,12 +133,31 @@ def text_info (text):
# Mise à jour de l'affichage des compteurs
def points_maj (cont):
+
+ # Texte
scene.objects['Lifes_text']['Text']=str(scene.objects['Points']['lifes'])+"/"+str(scene.objects['Points']['lifes_max'])
scene.objects['Coins_text']['Text']=str(scene.objects['Points']['coins'])
scene.objects['Level_text']['Text']=str(scene.objects['Points']['level'])+"/"+str(scene.objects['Points']['level_max'])
scene.objects['Minions_text']['Text']=str(scene.objects['Points']['minions'])
scene.objects['Points']['tics'] +=1
+ # Texte de la vague
+ if scene.objects['Map_text']['anim']:
+ if scene.objects['Map_text']['timer']>0:
+ scene.objects['Map_text'].worldPosition.x = scene.objects['Map_text']['position_init'][0]+(scene.objects['Map_text']['position_end'][0]-scene.objects['Map_text']['position_init'][0])*(scene.objects['Map_text']['timer']/120)
+ scene.objects['Map_text'].worldPosition.y = scene.objects['Map_text']['position_init'][1]+(scene.objects['Map_text']['position_end'][1]-scene.objects['Map_text']['position_init'][1])*(scene.objects['Map_text']['timer']/120)
+ scene.objects['Map_text'].worldPosition.z = scene.objects['Map_text']['position_init'][2]+(scene.objects['Map_text']['position_end'][2]-scene.objects['Map_text']['position_init'][2])*(scene.objects['Map_text']['timer']/120)
+ scene.objects['Map_text']['timer']-=1
+ if scene.objects['Map_text']['timer']==0:
+ scene.objects['Map_text'].color = color_text
+ scene.objects['Map_text'].worldPosition= scene.objects['Map_text']['position_end']
+ scene.objects['Map_text']['anim']=False
+
+ # Gestion du FPS
+ # if scene.objects['Points']['tics']%60 ==0: # Toutes les 60 tics
+ # print (time.localtime().tm_sec-fps_time)
+ # fps_time = time.localtime().tm_sec
+
# Augmentation d'un niveau
if scene.objects['Points']['coins']>=100:
scene.objects['Points']['level_max'] +=1
@@ -140,7 +166,9 @@ def points_maj (cont):
# Level trop élevé
if scene.objects['Points']['level'] > scene.objects['Points']['level_max'] :
scene.objects['Level_text'].color = color_text_red
- if scene.objects['Points']['level'] <= scene.objects['Points']['level_max']:
+ if scene.objects['Points']['level'] < scene.objects['Points']['level_max'] :
+ scene.objects['Level_text'].color = color_text_yellow
+ if scene.objects['Points']['level'] == scene.objects['Points']['level_max']:
scene.objects['Level_text'].color = color_text
# Ramasse minions perdues
@@ -163,6 +191,7 @@ def points_maj (cont):
if scene.objects['Points']['lifes'] == 0 or scene.objects['Points']['wave'] == scene.objects['Terrain']['nb_waves'] :
terrain_end ()
else:
+ scene.objects['Points']['minions']=0
scene.objects['Points']['wave'] +=1
ct_map.start(scene.objects['Points']['wave']) # Lancement du script de la vague
@@ -281,8 +310,9 @@ def terrain_run ():
scene.objects['Terrain']['thread_run']=True
scene.objects['Points']['time_begin']=time.localtime()
if scene.objects['Terrain']['debug_flag']==False: # Lecture dynamique du script python (risque de Segfault de Blender)
- importlib.reload(ct_cmd)
- # importlib.reload(ct_map)
+ importlib.reload(ct_cmd)
+ # imp.reload(ct_cmd) # Avec la bibliotèque imp
+ # importlib.reload(ct_map) # Waves script
ct_cmd.start() # Execution du script utilisateur
ct_map.start(1) # Lancement du script de la permière vague
@@ -340,21 +370,23 @@ def terrain_end ():
if maptime_sec<0:
maptime_mn-=1
maptime_sec+=60
- scene.objects['Endbanner_wave_text']['Text']="Wave \n"+str(scene.objects['Points']['wave'])
+ scene.objects['Endbanner_wave']['Text']="Wave \n"+str(scene.objects['Points']['wave'])
if maptime_mn<=99:
- scene.objects['Endbanner_points_text']['Text']="Level "+str(scene.objects['Points']['level_max'])+"\n Time "+ str(maptime_mn)+"'"+ str(maptime_sec)+"\""
+ scene.objects['Endbanner_points']['Text']="Level "+str(scene.objects['Points']['level_max'])+"\n Time "+ str(maptime_mn)+"'"+ str(maptime_sec)+"\""
else:
- scene.objects['Endbanner_points_text']['Text']="Level "+str(scene.objects['Points']['level_max'])+"\n Time "+ str(maptime_mn)+"'"
+ scene.objects['Endbanner_points']['Text']="Level "+str(scene.objects['Points']['level_max'])+"\n Time "+ str(maptime_mn)+"'"
scene.objects['Endbanner'].color = color_endbanner_bluelight
- scene.objects['Endbanner_wave_text'].color = color_black
- scene.objects['Endbanner_points_text'].color = color_black
- scene.objects['Endbanner_ok_text'].color = color_black
+ scene.objects['Endbanner_wave'].color = color_black
+ scene.objects['Endbanner_points'].color = color_black
+ scene.objects['Endbanner_ok'].color = color_black
scene.objects['End'].setVisible(True,True)
- scene.objects['End']['init_localPosition']= [scene.objects['End'].localPosition.x, scene.objects['End'].localPosition.y, scene.objects['End'].localPosition.z]
+ scene.objects['End'].worldPosition = [0, 1.53623, -0.892838]
+ # scene.objects['End']['position_init']= scene.objects['End'].localPosition
+ # scene.objects['End']['position_init']= [scene.objects['End'].localPosition.x, scene.objects['End'].localPosition.y, scene.objects['End'].localPosition.z]
pas=0.5
scene.objects['End'].localPosition.y=scene.objects['End'].localPosition.y-1*pas
scene.objects['End'].localPosition.z=scene.objects['End'].localPosition.z+0.85*pas
- scene.objects['End']['timer']=scene.objects['End']['timer']+1
+ scene.objects['End']['timer']+=1
if scene.objects['End']['timer']== 40:
scene.objects['Terrain']['map_run'] = False
@@ -392,30 +424,28 @@ def terrain_speed (obj):
with open("ct_config.xml", "wb") as f:
f.write(buffer_xml)
-# Fermer la page de fin
+# Page de fin
def endbanner_hl(cont):
if cont.sensors['MO'].status == JUST_ACTIVATED:
scene.objects['Endbanner'].color = color_white
- scene.objects['Endbanner_wave_text'].color = color_white
- scene.objects['Endbanner_points_text'].color = color_white
- scene.objects['Endbanner_ok_text'].color = color_white
+ scene.objects['Endbanner_wave'].color = color_white
+ scene.objects['Endbanner_points'].color = color_white
+ scene.objects['Endbanner_ok'].color = color_white
if cont.sensors['MO'].status == JUST_RELEASED:
scene.objects['Endbanner'].color = color_endbanner_bluelight
- scene.objects['Endbanner_wave_text'].color = color_black
- scene.objects['Endbanner_points_text'].color = color_black
- scene.objects['Endbanner_ok_text'].color = color_black
+ scene.objects['Endbanner_wave'].color = color_black
+ scene.objects['Endbanner_points'].color = color_black
+ scene.objects['Endbanner_ok'].color = color_black
def endbanner_close(cont):
if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
audiodev.play(sndbuff_click)
scene.objects['Terrain']['manip_mode']=0
- scene.objects['End'].localPosition.y=scene.objects['End']['init_localPosition'][0]
- scene.objects['End'].localPosition.y=scene.objects['End']['init_localPosition'][1]
- scene.objects['End'].localPosition.z=scene.objects['End']['init_localPosition'][2]
scene.objects['End'].setVisible(False,True)
+ scene.objects['End'].worldPosition = [20, 1.53623, -0.892838]
scene.objects['Endbanner'].color = [0.592, 0.68, 0.407, 1]
- scene.objects['Endbanner_wave_text'].color = color_black
- scene.objects['Endbanner_points_text'].color = color_black
+ scene.objects['Endbanner_wave'].color = color_black
+ scene.objects['Endbanner_points'].color = color_black
scene.objects['End']['timer']= 0
###############################################################################
@@ -454,7 +484,7 @@ def cmd_hl(cont):
# Activation
if cont.sensors['MO'].status == JUST_ACTIVATED and scene.objects['Terrain']['manip_mode']==0:
- if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl":
+ if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl" and obj.name!="About-cmd":
obj.setVisible(False,True)
scene.objects[obj.name+'-Hl'].setVisible(True,True)
@@ -475,7 +505,7 @@ def cmd_hl(cont):
# Désactivation
if cont.sensors['MO'].status == JUST_RELEASED and scene.objects['Terrain']['manip_mode']==0:
- if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl":
+ if obj.name!="Run" and obj.name!="Pause" and obj.name!="Run-Hl" and obj.name!="Pause-Hl" and obj.name!="Stop" and obj.name!="Stop-Hl" and obj.name!="About-cmd":
scene.objects[obj.name+'-Hl'].setVisible(False,True)
obj.setVisible(True,True)
@@ -504,6 +534,8 @@ def cmd_click (cont):
terrain_stop ()
if obj.name=="Speed_up" or obj.name=="Speed_down":
terrain_speed (obj)
+ if obj.name=="About-cmd":
+ about_open ()
###############################################################################
# Gestion du clavier
@@ -559,6 +591,12 @@ def mode(cont):
if scene.objects['Terrain']['thread_run']==True:
terrain_stop ()
+ # Touche +/- du pad -> Vitesse + ou /
+ if JUST_ACTIVATED in keyboard.inputs[bge.events.PADPLUSKEY].queue:
+ terrain_speed (scene.objects['Speed_up'])
+ if JUST_ACTIVATED in keyboard.inputs[bge.events.PADMINUS].queue:
+ terrain_speed (scene.objects['Speed_down'])
+
###############################################################################
# Manipulation 3D de la scène
###############################################################################
@@ -654,52 +692,75 @@ def manip_wheel(cont):
scene.objects['Camera'].applyMovement((0, 0, sensibilite_wheel), True)
###############################################################################
-# Aide
+# About
###############################################################################
-# # Ouvrir la page d'aide
-# def aide(cont):
-# if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
-# # scene.replace('Scene-Aide') # Bug Eevee -> même scene mais camera différente
-# scene.active_camera=scene.objects['Aide-Camera']
-# scene.objects['Apropos-Lien_projet'].color= color_link
-# scene.objects['Apropos-Lien_maquette'].color= color_link
-# scene.objects['Apropos-Lien_a4'].color= color_link
-# scene.objects['Apropos-Lien_blender'].color= color_link
-# scene.objects['Apropos-Lien_upbge'].color= color_link
-# scene.objects['Apropos-Lien_cc'].color= color_link
-# scene.objects['Apropos-Lien_gpl'].color= color_link
+def about_open():
+ scene.objects['Aboutbanner_title'].color = color_black
+ scene.objects['Aboutbanner_text'].color = color_black
+ scene.objects['About_link_git'].color= color_link
+ scene.objects['About_link_gpl'].color= color_link
+ scene.objects['About_link_blender'].color= color_link
+ scene.objects['About_link_upbge'].color= color_link
+ scene.objects['About_link_kay'].color= color_link
+ scene.objects['About_link_kenney'].color= color_link
+ scene.objects['About'].setVisible(True,True)
+ scene.objects['About'].worldPosition = [0, 1.53623, -0.892838]
+ scene.objects['About']['timer'] = 0
+ scene.objects['About']['anim'] = True
-# # Fermer la page d'aide
-# def aide_fermer(cont):
-# if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
-# # bge.logic.addScene('Scene') # Bug Eevee -> même scene mais camera différente
-# scene.active_camera=scene.objects['Camera']
+def about_open_anim():
+ pas=0.5
+ scene.objects['About'].localPosition.y=scene.objects['About'].localPosition.y-1*pas
+ scene.objects['About'].localPosition.z=scene.objects['About'].localPosition.z+0.85*pas
+ scene.objects['About']['timer']+=1
+ if scene.objects['About']['timer']== 40:
+ scene.objects['About']['anim'] = False
-# # Aller sur les liens
-# def aide_apropos(cont):
-# if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
-# obj = cont.owner
-# if obj.name == "Apropos-Lien_maquette" :
-# webbrowser.open('https://www.a4.fr/wiki/')
-# if obj.name == "Apropos-Lien_projet" :
-# webbrowser.open('https://gitlab.com/blender-edutech')
-# if obj.name == "Apropos-Lien_a4" :
-# webbrowser.open('https://www.a4.fr')
-# if obj.name == "Apropos-Lien_blender" :
-# webbrowser.open('https://blender.org')
-# if obj.name == "Apropos-Lien_upbge" :
-# webbrowser.open('https://upbge.org')
-# if obj.name == "Apropos-Lien_cc" :
-# webbrowser.open('https://creativecommons.org/licenses/by-sa/4.0/')
-# if obj.name == "Apropos-Lien_gpl" :
-# webbrowser.open('https://www.gnu.org/licenses/gpl-3.0.html')
+def about_hl(cont):
+ if cont.sensors['MO'].status == JUST_ACTIVATED:
+ scene.objects['Aboutbanner'].color = color_white
+ scene.objects['Aboutbanner_ok'].color = color_white
+ scene.objects['Aboutbanner_title'].color = color_white
+ if cont.sensors['MO'].status == JUST_RELEASED:
+ scene.objects['Aboutbanner'].color = color_endbanner_bluelight
+ scene.objects['Aboutbanner_ok'].color = color_black
+ scene.objects['Aboutbanner_title'].color = color_black
+
+def about_close(cont):
+ if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ audiodev.play(sndbuff_click)
+ scene.objects['Terrain']['manip_mode']=0
+ scene.objects['About'].setVisible(False,True)
+ scene.objects['About'].worldPosition = [22, 1.53623, -0.892838]
+ scene.objects['Aboutbanner'].color = [0.592, 0.68, 0.407, 1]
+ scene.objects['About']['timer']= 0
+
+def about_link(cont):
+ if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive :
+ obj = cont.owner
+ if obj.name == "About_link_git-colbox" :
+ webbrowser.open('https://gitlab.com/phroy/codetower')
+ if obj.name == "About_link_gpl-colbox" :
+ webbrowser.open('https://www.gnu.org/licenses/gpl-3.0.html')
+ if obj.name == "About_link_blender-colbox" :
+ webbrowser.open('https://www.blender.org')
+ if obj.name == "About_link_upbge-colbox" :
+ webbrowser.open('https://www.upbge.org')
+ if obj.name == "About_link_kay-colbox" :
+ webbrowser.open('https://www.kaylousberg.com')
+ if obj.name == "About_link_kenney-colbox" :
+ webbrowser.open('https://www.kenney.nl')
+ if obj.name == "About_link_blender-colbox" :
+ webbrowser.open('https://www.blender.org')
+
+def about_link_hl(cont):
+ if cont.sensors['MO'].status == JUST_ACTIVATED :
+ obj = cont.owner
+ name=obj.name[:-7]
+ scene.objects[name].color = color_link_hl
+ if cont.sensors['MO'].status == JUST_RELEASED :
+ obj = cont.owner
+ name=obj.name[:-7]
+ scene.objects[name].color = color_link
-# # Le highlight des liens
-# def aide_apropos_hl(cont):
-# if cont.sensors['MO'].status == JUST_ACTIVATED :
-# obj = cont.owner
-# obj.color = color_link_hl
-# if cont.sensors['MO'].status == JUST_RELEASED :
-# obj = cont.owner
-# obj.color = color_link
diff --git a/ct_cmd.py b/ct_cmd.py
index 8f31c04..403ba30 100644
--- a/ct_cmd.py
+++ b/ct_cmd.py
@@ -15,14 +15,14 @@ from ct_lib import * # Bibliothèque CodeTower
#
###############################################################################
-purple = [0.202, 0.114, 0.521,1]
-turquoise = [0.051, 0.270, 0.279,1]
-magenta = [0.799, 0.005, 0.314,1]
-orange = [0.799, 0.130, 0.063,1]
-yellow = [0.799, 0.617, 0.021, 1]
-green = [0.246, 0.687, 0.078, 1]
-red = [0.799, 0.031, 0.038, 1]
-blue = [0.127, 0.456, 1.000, 1]
+purple = (0.202, 0.114, 0.521,1)
+turquoise = (0.051, 0.270, 0.279,1)
+magenta = (0.799, 0.005, 0.314,1)
+orange = (0.799, 0.130, 0.063,1)
+yellow = (0.799, 0.617, 0.021, 1)
+green = (0.246, 0.687, 0.078, 1)
+red = (0.799, 0.031, 0.038, 1)
+blue = (0.127, 0.456, 1.000, 1)
###############################################################################
# En: Threads management << DONT CHANGE THIS SECTION >>
@@ -76,14 +76,13 @@ def commands():
while True:
- if ct_level()==1:
+ if ct_level() == 1:
ct_build(4,5, "Archer tower", "Tower #1", blue, "square-A")
-
- if ct_level()==1:
+
+ if ct_level()==3:
ct_build(4,-2, "Archer tower", "Tower #2", blue, "square-A")
- if ct_level()==3:
+ if ct_level()==2:
ct_build(5,5, "Mage tower", "Tower #3", magenta, "square-B")
-
end() # End of cycle << DONT CHANGE THIS LINE >>
diff --git a/ct_config.xml b/ct_config.xml
index c4cbdab..5e20278 100644
--- a/ct_config.xml
+++ b/ct_config.xml
@@ -1,5 +1,5 @@
- 4.0
+ 2.0
\ No newline at end of file
diff --git a/ct_lib.py b/ct_lib.py
index e624e4d..0899b83 100644
--- a/ct_lib.py
+++ b/ct_lib.py
@@ -30,21 +30,26 @@ import random
scene = bge.logic.getCurrentScene()
# Colors
-tower_purple = [0.202, 0.114, 0.521,1]
-tower_turquoise = [0.051, 0.270, 0.279,1]
-tower_magenta = [0.799, 0.005, 0.314,1]
-tower_orange = [0.799, 0.130, 0.063,1]
-tower_yellow = [0.799, 0.617, 0.021, 1]
-tower_green = [0.246, 0.687, 0.078, 1]
-tower_red = [0.799, 0.031, 0.038, 1]
-tower_blue = [0.127, 0.456, 1.000, 1]
-tower_black = [0, 0, 0, 1]
+tower_purple = (0.202, 0.114, 0.521,1)
+tower_turquoise = (0.051, 0.270, 0.279,1)
+tower_magenta = (0.799, 0.005, 0.314,1)
+tower_orange = (0.799, 0.130, 0.063,1)
+tower_yellow = (0.799, 0.617, 0.021, 1)
+tower_green = (0.246, 0.687, 0.078, 1)
+tower_red = (0.799, 0.031, 0.038, 1)
+tower_blue = (0.127, 0.456, 1.000, 1)
+tower_black = (0, 0, 0, 1)
-ray_yellow = [0.799, 0.617, 0.021, 1] # [0.8, 0.619, 0.021])
-ray_blue = [0.127, 0.456, 1.000, 1]
-ray_black = [0, 0, 0, 1]
+color_text = (0, 0, 0, 1) # Noir
+color_text_red = (0.799, 0.031, 0.038, 1)
+color_text_orange = (0.799, 0.176, 0.054, 1)
+color_text_yellow = (0.799, 0.617, 0.021, 1)
-color_kaykit_black = [0.019, 0.032, 0.037, 1]
+ray_yellow = (0.799, 0.617, 0.021, 1) # [0.8, 0.619, 0.021])
+ray_blue = (0.127, 0.456, 1.000, 1)
+ray_black = (0, 0, 0, 1)
+
+color_kaykit_black = (0.019, 0.032, 0.037, 1)
# Sounds
audiodev = aud.Device()
@@ -163,6 +168,9 @@ def ct_minion_details(x,y,cat,level,body="Knight_m_A_common"):
minion.name="wm("+str(scene.objects['Terrain']['idm'])+")" # Wave minion (wm), identifier minion (idm)
scene.objects['Points']['minions'] +=1
scene.objects['Points']['minions_run'] +=1
+ minion['dist']=0.0
+ minion['dist_last_x']=x
+ minion['dist_last_y']=y
# Caracteristics
minion_carac= scene.objects['Terrain']['minion_carac']
@@ -193,7 +201,7 @@ def scn_minion_dead(cont):
obj.endObject()
###############################################################################
-# Spells
+# Spells / Casts
###############################################################################
# Buff/debuff Minion
@@ -202,6 +210,11 @@ def scn_minion_affect(cont):
# print (obj.name, obj['buff'])
slow_state=False
+ # Distance parcourue
+ obj['dist']=obj['dist']+ math.sqrt((obj.worldPosition.x-obj['dist_last_x'])**2+(obj.worldPosition.y-obj['dist_last_y'])**2)
+ obj['dist_last_x']=obj.worldPosition.x
+ obj['dist_last_y']=obj.worldPosition.y
+
# Etats actif
for debuff_i in obj['buff']:
if debuff_i[1] <= 0:
@@ -277,6 +290,8 @@ def ct_build_details(x,y, cat='Archer tower', tower_name="Tower", color=tower_pu
tour['techno']=[]
tour['cast']="slow"
tour['cast_duration']=2
+ tour['target']=[]
+ tour['target_past']=[]
# Capteur Near
tour.sensors['Near'].distance=tour['range']
@@ -298,9 +313,57 @@ def scn_tower_near(cont):
sensor = obj.sensors['Near']
# Tir
- # FIXME: tir sur le plus avancé
if sensor.positive and len(sensor.hitObjectList)>0 and scene.objects['Terrain']['run']==True :
+
+ # Tir sur le plus avancé basé sur les distances parcourues
target=sensor.hitObjectList[0]
+ target_dist = target['dist']
+ for obj_i in sensor.hitObjectList:
+ if obj_i['dist']> target_dist:
+ target=obj_i
+ target_dist = target['dist']
+
+ # Tir sur le plus avancé basé sur l'ordre de passage
+ # target=sensor.hitObjectList[0]
+ # target_id = target['navPosition']
+ # for obj_i in sensor.hitObjectList:
+ # if obj_i['navPosition']< target_id:
+ # target=obj_i
+ # target_id = target['navPosition']
+
+ # Tir sur le plus avancé basé sur les distances par rapport à la tour -> ne marche pas
+ # target=sensor.hitObjectList[0]
+ # if len(sensor.hitObjectList)>1:
+ # target_eloignement = False
+ # target_distance_eloignement = 0
+ # target_distance_approche = 100
+ # print ("detection:",sensor.hitObjectList)
+ # for obj_i in sensor.hitObjectList:
+ # for obj_j in obj['target_past']:
+ # if obj_j[0]==obj_i.name:
+ # print ("name :", obj_j[0], "distance :", obj.getDistanceTo(obj_i), "distance old :", obj_j[1], "ecart :", obj.getDistanceTo(obj_i) - obj_j[1])
+ # # Éloignement
+ # if obj.getDistanceTo(obj_i) - obj_j[1] > 0: # Ecart de distance
+ # target_eloignement = True
+ # if obj.getDistanceTo(obj_i) > target_distance_eloignement:
+ # target=obj_i
+ # target_distance_eloignement = obj.getDistanceTo(obj_i)
+ # # Approche
+ # else:
+ # if target_eloignement == False:
+ # if obj.getDistanceTo(obj_i) < target_distance_approche:
+ # target=obj_i
+ # target_distance_approche = obj.getDistanceTo(obj_i)
+ # if target_eloignement == True:
+ # print ("Eloignement : target:", target.name, "distance :", obj.getDistanceTo(target))
+ # print ("")
+ # else:
+ # print ("Approche : target:", target.name, "distance :", obj.getDistanceTo(target))
+ # print ("")
+ # obj['target_past']=[]
+ # for obj_i in sensor.hitObjectList:
+ # obj['target_past'].append([obj_i.name, obj.getDistanceTo(obj_i)])
+
# Orientation du tower minion
towerminion="tm("+str(round(obj.worldPosition.x))+','+str(round(obj.worldPosition.y))+")"
@@ -365,6 +428,22 @@ def scn_tower_near(cont):
# Carte
###############################################################################
+# Texte de carte
+def ct_map_text_wave(wave):
+ scene.objects['Map_text']['Text']=("Wave " + str(wave))
+ scene.objects['Map_text'].setVisible(True,False)
+ scene.objects['Map_text'].color = color_text_yellow
+ scene.objects['Map_text']['timer']=120
+ scene.objects['Map_text']['position_init']=[8.22904, -2.86185, 6.07395]
+ scene.objects['Map_text']['position_end']=[11.1751, 5.99318, 0.480557]
+ scene.objects['Map_text'].worldPosition= scene.objects['Map_text']['position_init']
+ scene.objects['Map_text']['anim']=True
+
+ # Texte de carte
+def ct_map_text(text):
+ scene.objects['Map_text']['Text']=text
+ scene.objects['Map_text'].setVisible(True,False)
+
# Fin
def ct_map_end(x,y):
mapend= scene.addObject("Map_end", scene.objects['Terrain'])
@@ -446,11 +525,6 @@ def ct_print (text):
scene.objects['Text_info-1']['Text']=lines_txt[0]+"\n"+lines_txt[1]+"\n"+lines_txt[2]
scene.objects['Text_info-2']['Text']=lines_txt[3]+"\n"+lines_txt[4]+"\n"+lines_txt[5]
-# Texte de carte
-def ct_map_text(text):
- scene.objects['Map_text']['Text']=text
- scene.objects['Map_text'].setVisible(True,False)
-
###############################################################################
# Dessin bas niveau (bge.render.drawLine)
###############################################################################
diff --git a/ct_map1.py b/ct_map1.py
index 103b695..929d01e 100644
--- a/ct_map1.py
+++ b/ct_map1.py
@@ -1,5 +1,7 @@
import bge # Bibliothèque Blender Game Engine (UPBGE)
+import bpy # Blender
from ct_lib import * # Bibliothèque CodeTower
+import os
###############################################################################
# ct_map1.py
@@ -119,25 +121,28 @@ def minion_definition():
# Wave 1
def wave1():
- ct_map_text("Wave 1")
+ ct_map_text_wave(1)
for i in range (15):
- ct_minion_details(14,3,"Orc",1, "Orc_A_common")
+ ct_minion(14,3,"Orc",1)
+ # ct_minion_details(14,3,"Orc",1, "Orc_A_common")
ct_sleep (2)
end()
# Wave 2
def wave2():
- ct_map_text("Wave 2")
+ ct_map_text_wave(2)
for i in range (20):
- ct_minion_details(14,3,"Orc",1, "Orc_A_common")
+ ct_minion(14,3,"Orc",1)
+ # ct_minion_details(14,3,"Orc",1, "Orc_A_common")
ct_sleep (1)
end()
# Wave 3
def wave3():
- ct_map_text("Wave 3")
+ ct_map_text_wave(3)
for i in range (30):
- ct_minion_details(14,3,"Orc",1, "Orc_A_common")
+ ct_minion(14,3,"Orc",1)
+ # ct_minion_details(14,3,"Orc",1, "Orc_A_common")
# ct_minion(14,3,"Knight",1)
ct_sleep (1)
end()
@@ -172,12 +177,23 @@ def tower_definition():
# Initialization
def map_init():
+
+ # Base
scene.objects['Terrain']['size'] = [-15,15,-10,10] # Map size
scene.objects['Terrain']['navmesh'] = "Navmesh.004" # Navmesh
minion_definition()
tower_definition()
scene.objects['Terrain']['nb_waves'] = 3 # Number of waves
+ # Landscape
+ file_path = 'asset/map/map1-landscape.blend'
+ inner_path = 'Object'
+ object_name = 'Landscape'
+ bpy.ops.wm.append(
+ filepath=os.path.join(file_path, inner_path, object_name),
+ directory=os.path.join(file_path, inner_path),
+ filename=object_name)
+
# Ajout des sorties
scene.objects['Terrain']['endtile'] = "tile_straight.036"
ct_map_end(1,-10)