From 2a6b1507f32f1184f105bbcd52c39bbab93bc5bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=88=E7=91=97=E6=9D=B0?= <3695888@qq.com> Date: Mon, 22 Feb 2021 21:32:13 +0800 Subject: [PATCH] reee DEMO 1%! --- bin/client.py | 39 +++++--- bin/main.py | 3 +- bin/server.py | 15 ++- bin/tools.py | 2 +- bin/unpack_textures.py | 3 +- sys_value/lang/zh-cn.json5 | 6 ++ tests/test_image.py | 18 ++++ textures/Editor.json5 | 131 +++++++++++++++++++++++++ textures/Editor/ButtonDarkSide.png | Bin 0 -> 121 bytes textures/Editor/ButtonLightSide.png | Bin 0 -> 133 bytes textures/Editor/DeleteButton.png | Bin 0 -> 2005 bytes textures/Editor/DuplicateButton.png | Bin 0 -> 1184 bytes textures/Editor/MirrorButton.png | Bin 0 -> 1577 bytes textures/Editor/PartButton.png | Bin 0 -> 450 bytes textures/Editor/PartGroupHeader.png | Bin 0 -> 517 bytes textures/Editor/RotateButton.png | Bin 0 -> 2257 bytes textures/Editor/ToolbarDark.png | Bin 0 -> 140 bytes textures/Editor/ToolbarIconAddPart.png | Bin 0 -> 932 bytes textures/Editor/ToolbarIconMenu.png | Bin 0 -> 282 bytes textures/Editor/ToolbarIconPlay.png | Bin 0 -> 775 bytes textures/Editor/ToolbarIconStaging.png | Bin 0 -> 540 bytes textures/Editor/ToolbarIconZoom.png | Bin 0 -> 1004 bytes textures/Editor/ToolbarIconZoomIn.png | Bin 0 -> 1073 bytes textures/Editor/ToolbarIconZoomOut.png | Bin 0 -> 1053 bytes textures/Editor/ToolbarLight.png | Bin 0 -> 145 bytes textures/Editor/TrashCan.png | Bin 0 -> 3348 bytes textures/runtime/background.png | Bin 0 -> 293 bytes textures/runtime/background_ka1.jpg | Bin 0 -> 21906 bytes textures/runtime/background_ka2.jpg | Bin 0 -> 7425 bytes 29 files changed, 197 insertions(+), 20 deletions(-) create mode 100644 tests/test_image.py create mode 100644 textures/Editor.json5 create mode 100644 textures/Editor/ButtonDarkSide.png create mode 100644 textures/Editor/ButtonLightSide.png create mode 100644 textures/Editor/DeleteButton.png create mode 100644 textures/Editor/DuplicateButton.png create mode 100644 textures/Editor/MirrorButton.png create mode 100644 textures/Editor/PartButton.png create mode 100644 textures/Editor/PartGroupHeader.png create mode 100644 textures/Editor/RotateButton.png create mode 100644 textures/Editor/ToolbarDark.png create mode 100644 textures/Editor/ToolbarIconAddPart.png create mode 100644 textures/Editor/ToolbarIconMenu.png create mode 100644 textures/Editor/ToolbarIconPlay.png create mode 100644 textures/Editor/ToolbarIconStaging.png create mode 100644 textures/Editor/ToolbarIconZoom.png create mode 100644 textures/Editor/ToolbarIconZoomIn.png create mode 100644 textures/Editor/ToolbarIconZoomOut.png create mode 100644 textures/Editor/ToolbarLight.png create mode 100644 textures/Editor/TrashCan.png create mode 100644 textures/runtime/background.png create mode 100644 textures/runtime/background_ka1.jpg create mode 100644 textures/runtime/background_ka2.jpg diff --git a/bin/client.py b/bin/client.py index b703c71..410f2b5 100644 --- a/bin/client.py +++ b/bin/client.py @@ -75,10 +75,12 @@ class window(pyglet.window.Window): self.view = 'space' self.net_mode = net_mode # FPS - self.max_fps = self.FPS - self.min_fps = self.FPS + self.max_fps = [self.FPS, time.time()] + self.min_fps = [self.FPS, time.time()] + self.fps_wait = 5 + # lang + self.lang = tools.config('sys_value/lang/%s.json5' % language, 'client') # configs - self.lang = tools.config('sys_value/lang/%s.json5' % language) self.view = tools.config('configs/view.json5') self.map_view = [configs.basic_poi(poi_type='chunk')] self.part_list = tools.config('sys_value/parts.json5') @@ -91,7 +93,7 @@ class window(pyglet.window.Window): self.label_batch = pyglet.graphics.Batch() self.runtime_batch = pyglet.graphics.Batch() # window - self.logger.info('client setup done!') + self.logger.info('%s' % self.lang['setup.done']) self.textures = {} # setup self.setup() @@ -108,6 +110,9 @@ class window(pyglet.window.Window): path = parts[part][2][0] part_image = image.load('textures/' + path) self.textures['part'][part] = part_image + pyglet.resource.path = ['textures'] + pyglet.resource.reindex() + self.trash_can = pyglet.resource.image('Editor/TrashCan.png') # tests self.info_label = pyglet.text.Label(text='test %s' % pyglet.clock.get_fps(), @@ -118,26 +123,34 @@ class window(pyglet.window.Window): # draws def update(self, ree): + self.FPS_update() + + def FPS_update(self): now_FPS = pyglet.clock.get_fps() - if now_FPS > self.max_fps: - self.max_fps = now_FPS - elif now_FPS < self.min_fps: - self.min_fps = now_FPS - self.info_label.text = 'now FPS: %03d \n max FPS: %02d \n min FPS: %02d' % (now_FPS, self.max_fps, self.min_fps) - self.info_label.anchor_x = 'left' - self.info_label.anchor_y = 'top' + if now_FPS > self.max_fps[0]: + self.max_fps = [now_FPS, time.time()] + elif now_FPS < self.min_fps[0]: + self.min_fps = [now_FPS, time.time()] + else: + if (time.time() - self.max_fps[1]) > self.fps_wait: + 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: %03d max FPS: %02d min FPS: %02d' % ( + now_FPS, self.max_fps[0], self.min_fps[0]) def on_draw(self): + self.clear() + self.build_draw() self.draw_batch() def draw_batch(self): - self.clear() self.part_batch.draw() self.runtime_batch.draw() self.label_batch.draw() def build_draw(self): - pass + self.trash_can.blit(x=self.width - 90, y=self.height - 90) def space_draw(self): # render parts diff --git a/bin/main.py b/bin/main.py index 4fdf745..49eb076 100644 --- a/bin/main.py +++ b/bin/main.py @@ -39,8 +39,7 @@ class Game: # lang_config self.language = tools.config('sys_value/basic_config.json5') self.language = self.language['language'] - self.lang = tools.config('sys_value/lang/%s.json5' % self.language) - self.lang = self.lang['main'] + self.lang = tools.config('sys_value/lang/%s.json5' % self.language, 'main') # logger self.log_config = tools.config('configs/logging.json5', 'file') self.log_filename = configs.name_handler(self.log_config['filename']['main'], diff --git a/bin/server.py b/bin/server.py index 07fc455..2f822d2 100644 --- a/bin/server.py +++ b/bin/server.py @@ -1,10 +1,16 @@ -''' +""" writen by shenjackyuanjie mail: 3695888@qq.com -''' +""" +import os import multiprocessing as mp +try: + from bin import tools +except (ModuleNotFoundError, ImportError, ImportWarning): + import tools + class server(mp.Process): def __init__(self, dev_list, dev_dic, logger, language='zh-cn', net_mode='local'): @@ -15,10 +21,13 @@ class server(mp.Process): # value self.process_id = 'Server' self.process_name = 'server process' + self.process_pid = os.getpid() + # lang + self.lang = tools.config('sys_value/lang/%s.json5' % language, 'server') # share memory self.dev_list = dev_list self.dev_dic = dev_dic - self.logger.info('server setup done!') + self.logger.info('%s' % self.lang['setup.done']) def run(self): pass diff --git a/bin/tools.py b/bin/tools.py index 5947a88..dc0e252 100644 --- a/bin/tools.py +++ b/bin/tools.py @@ -212,7 +212,7 @@ def config(file_name, stack=None): try: xml_load = parse(file_name) except FileNotFoundError as exp: - log = 'no config json(5) file \n file name : %s \n stack : %s' % ( + log = 'no config xml file \n file name : %s \n stack : %s' % ( file_name, stack) tools_logger.exception(log) raise FileNotFoundError(log) diff --git a/bin/unpack_textures.py b/bin/unpack_textures.py index 3ed30eb..1a0c3b9 100644 --- a/bin/unpack_textures.py +++ b/bin/unpack_textures.py @@ -39,7 +39,7 @@ def cut_and_save(config, save_path): print(exp) for config_ in configs['images']: config__ = configs['images'][config_] - save_name = 'textures/' + save_path + config_ + save_name = 'textures/%s/%s' % (save_path, config_) x, y, w, h, t = config__[0], config__[1], config__[2], config__[3], config__[4] crop_box = [x, y, x + w, y + h] pic_ = pic.crop(crop_box) @@ -53,3 +53,4 @@ def All_in_one_cut(xml, path): json_name = xml[:-4] + '.json5' rewrite_config(xml, json_name) cut_and_save(json_name, path) + diff --git a/sys_value/lang/zh-cn.json5 b/sys_value/lang/zh-cn.json5 index a9bbe36..7439a52 100644 --- a/sys_value/lang/zh-cn.json5 +++ b/sys_value/lang/zh-cn.json5 @@ -9,5 +9,11 @@ 'logger.logfile_fmt': '日志文件记录格式:', 'logger.logfile_datefmt': '日志文件日期格式:', 'game_start.at': '游戏主线程开始于:' + }, + 'client': { + 'setup.done': '客户端载入完成' + }, + 'server': { + 'setup.done': '服务端载入完成' } } \ No newline at end of file diff --git a/tests/test_image.py b/tests/test_image.py new file mode 100644 index 0000000..0c8d0a6 --- /dev/null +++ b/tests/test_image.py @@ -0,0 +1,18 @@ +import pyglet + +window = pyglet.window.Window(width=1000, height=1000) +# a_image = pyglet.image.load('textures/Runtime.png') +pyglet.resource.path = ['../textures'] +pyglet.resource.reindex() +b_image = pyglet.resource.image('Runtime.png') +c_image = pyglet.resource.image('Editor/TrashCan.png') + + +@window.event +def on_draw(): + window.clear() + b_image.blit(x=500, y=10) + c_image.blit(x=500, y=600) + + +pyglet.app.run() diff --git a/textures/Editor.json5 b/textures/Editor.json5 new file mode 100644 index 0000000..cc58afc --- /dev/null +++ b/textures/Editor.json5 @@ -0,0 +1,131 @@ +{ + image_name: "Editor.png", + images: { + "ButtonDarkSide.png": [ + 508, + 2, + 2, + 100, + null + ], + "ButtonLightSide.png": [ + 2, + 508, + 100, + 2, + "y" + ], + "DeleteButton.png": [ + 364, + 148, + 32, + 32, + null + ], + "DuplicateButton.png": [ + 406, + 84, + 80, + 80, + null + ], + "MirrorButton.png": [ + 324, + 14, + 80, + 80, + null + ], + "PartButton.png": [ + 2, + 2, + 320, + 100, + null + ], + "PartGroupHeader.png": [ + 2, + 104, + 45, + 320, + "y" + ], + "RotateButton.png": [ + 426, + 2, + 80, + 80, + null + ], + "ToolbarDark.png": [ + 324, + 8, + 100, + 4, + "y" + ], + "ToolbarIconAddPart.png": [ + 312, + 148, + 50, + 50, + null + ], + "ToolbarIconMenu.png": [ + 260, + 104, + 50, + 50, + null + ], + "ToolbarIconPlay.png": [ + 208, + 104, + 50, + 50, + null + ], + "ToolbarIconStaging.png": [ + 156, + 104, + 50, + 50, + null + ], + "ToolbarIconZoom.png": [ + 49, + 104, + 50, + 50, + null + ], + "ToolbarIconZoomIn.png": [ + 104, + 104, + 50, + 50, + null + ], + "ToolbarIconZoomOut.png": [ + 324, + 96, + 50, + 50, + null + ], + "ToolbarLight.png": [ + 324, + 2, + 100, + 4, + "y" + ], + "TrashCan.png": [ + 2, + 426, + 80, + 80, + null + ] + } +} \ No newline at end of file diff --git a/textures/Editor/ButtonDarkSide.png b/textures/Editor/ButtonDarkSide.png new file mode 100644 index 0000000000000000000000000000000000000000..09b98bbd085c09ed44c818a1d661fcb85dec0fc6 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^OhBB%!3HGPNIy&lQVyOjjv*CulBZ0a`uF?+AUMLn zs?*cc!*ir-f;y}CLaXMd|Ns9Fx$4@}_#{*PmdKI;Vst0C}Y^L;wH) literal 0 HcmV?d00001 diff --git a/textures/Editor/ButtonLightSide.png b/textures/Editor/ButtonLightSide.png new file mode 100644 index 0000000000000000000000000000000000000000..4739a4ea0e8d468748e7a8393f2e72a272b5505d GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^OhBB%!3HGPNIy&lQa+w8jv*Cu-u55lVo>04Uj8He z-~af|vX?7OC hta11B|Gz%)nXJgt@9``>w-0D8gQu&X%Q~loCIE>OF5>_I literal 0 HcmV?d00001 diff --git a/textures/Editor/DeleteButton.png b/textures/Editor/DeleteButton.png new file mode 100644 index 0000000000000000000000000000000000000000..826b06e267878681ada02a783b6ab3bb16c9d875 GIT binary patch literal 2005 zcmV;`2P*i9P)LAu@>8WwkCyUtOaA6vgTS-2h&^!6vEWeV^dGP``$A@hueXf69A0E=YId? z&pg-vt?y~hTn9>nNz$0?Vs6H1P5RuD)1k8;{+~Yd&UZ@3KcB#n#Q>Za zKECqpOLpG3VSaE8GCzZDG!{8)b1JeOj@u5c?F4K=1j*&_gADFtzvPOaJ$m0$a1DS1 zunxw@&p&TNC_eGTyAXvZHDs*?OoyzQ3Dcpszy@nAqBV_tp1$>CZ0hUT`qXssHlXAH z6ktHP9`)&CBy+PMvJjPBWC%KC9hopE$wKSDNwDP-4P)pHvIVA#eG330u(k4Wbh$(l z$B4C9(~MNW)UnHhpyj!T~WHQ9?V;=?+~nP<>-=iSV8<*6T<#1TctQ8b(kMTB|;Vcg_IXdobJ zp$blGTZcxdCSXi!LJ1bj%hy~>B{5uh?R6-nsLjnG`8?;`w~Ke~+DWi!6LVd8YLf@i zu1hdHMDf*E+4sXAFj%e;J3^eKWk@W9T0p0*V;47JWFSt2M75`rC?PP0KVNq}aU3cyY{|H{J-=a@N&XQ?6Di&dyRQmx-bXtrXe5KIYzdgS|K0$jUIJ z-*GT3J)D#UR|!gNCxA5R8LfyokqW+#7l!P)=_V4#A=tc`Qn^eL$7m&Z`8<`03HDs` zUCuCuA>SuyjqOF0Sn!pgm04JGS_>jVR;#otJ4i^ob!2P|85&~d=uwiWfv8m55$GE^ zld(@<-2xKU%i@ov4|** z&ieS-EP<;T{OAZ9pMH|U)-BA3AsK5=w52t^R)}iXMzxR$lGb}Mi=ZnNf_3Zg@3@1R zAfR^m5ZZNcy8@grqI+ODg~8=`QAA(=N;W?JINh5!GheHbY4y-z)(R!EP=e+hNFTG# z(#X9qBr`sazUwY#dU~i$9zr_~nSlZ7d-pPN^*1R${aXe`M(H0~g`dO(`2riCeU{$K zFQ;Cs;fu6wHtlOAOG}U>7I9ttAi!&~pUvV10bF$zQ>#`HPEMk=A~QHhZTD{G@7&3{ zBmX4+$-NwU;9&~6JW4wNc)rhhk32$kco@;TZ8sO-<+@P1J&MyN1gz)db$1iRaoTv+ z5_=xy=bp!|SOL8~c$p00#015A?q#hpoN@NqRLf=lar=+h*FVVmuU&f^5xsmK^Y&ZBj|ufFzeaukermh!XM<7d$V@xu1)Og;D@pIWnqjPEbp4UH&#WznVfUK4;(*!JW(>wdR- z)mkcz_CX;ch%r7<@Qfv#!|@_F2Bdd7DSnV_qSY@DdsyWPU>)5WHIINODM47PQDPMXTn@uHlB n=~&Z1IsG1-_&2%w-_ySU|JtxHp%jhE00000NkvXXu0mjffGpV) literal 0 HcmV?d00001 diff --git a/textures/Editor/DuplicateButton.png b/textures/Editor/DuplicateButton.png new file mode 100644 index 0000000000000000000000000000000000000000..dc803b48b8d06c312e861fa0b453479fd5e8fde1 GIT binary patch literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdoh8U`h9MaSW-L^LFli@91!u1NI+} zpQ=-7{F>Mr6g5Lh#pf_jwLx2`rt!jzM@&unl`jw9Xf|+H;PaAOV!&+lNBUDxO+jEy zM~`Go-~`9ELKcy`lSOW|TV5_P5HqdLsNU%jS$y8}-QJDQnGap>em-x#{JEXaYfhfs z%NMt)>d5m0+a2r+WRJeC;1Ow%cgz34-N2miwL|hjHMelK>ptnd2j@I~dLo+r*7mwR z=ko1i7Z?5MyL$4b(DU~HpI(albJYBlc)+vcE~5>@t@65m9q!%cj0F~Jyf2-z`Tv@$ zUo8LAzSko6=PrMHpqcN1a6@nV_5zLK(v2TKi0!lXXROI>kbW?KzqO9DI~(;`zP^}``rqGjdfkGk#Zr|fH8-&i)WT(JMRv(iL^ zwe}0MA6&RFL2Z51S|fAwJuTY#QSw^j?YC+|od(9n>pua{cX%jf~s2ZJTv( z`vnf3R;Q>re#=j$7)?9LtTFv`ijkz4nAnzNAXxTAS7pQc_5R({r%#uj+HKO^-5s^& z{KlCaoLAOw3+vm{{i4_~+r41r_r|n8{;Py0y7W4DUf}@w^T-!X8NT*T7o{J6>+a;0 z2miix?_S;8k6ud;ojb?3Gp6tB*V2`CKEf})R?VC{cj@-++gJX*(tP=)iUf}k51Zyx zuO*i=zkU1GaxV3j$hPi1-4%P|CY@YTP#tXN$<^vK%f|ZJxw!Sy4<2+hGdJg*?=9W9 zHEQiU`Nb}a19i7$zm@5AYn7Q{)cUt>zu4`qW#4|*I6XH=6}-59TiLp~t}-#NypCun z@m+C?5>gEiGHoqgp_#*&#qugZ`2y1vpa(>*Ei}6{$%E6z);2f8Xl+Lavv0!IC>Zm> z&!3gflQUgiWLAVmfDFKe6dTpm)uZmbv0n40Z^8kmg$s`Ux@~sPt%W6RbEK}H+Ttk*Vxj+;=-eK>(=eMt()_Q(L+aRWk^@j zMvYs4E-C122+L8IxXC!T)#?|VKUKY!}(jk;O#8l6H& zNR#Ppl=bW4i_bGyf>~~DEt@xE#)YKXJ~so`1$VR3x8L@)kxQ?tin3nz|5USJOLpSo zj%(-A0(8VWk0!O<^0Q2VR8NM@38;)pE>ZtxZ^^*_*A?rxO#zlX44$rjF6*2UngEe1DOdmi literal 0 HcmV?d00001 diff --git a/textures/Editor/MirrorButton.png b/textures/Editor/MirrorButton.png new file mode 100644 index 0000000000000000000000000000000000000000..f4d9224d0ba324448376d13ef3b0f4b5e384dc51 GIT binary patch literal 1577 zcmV+^2G;qBP)Nkl z-D^{49LGO-AvSH7&^H=rYt^>Uf-UK0d*KRe)DEm9gDTW05t~$+)h-si8N((2GNj-I}h>^9K6)1>lpdhA!f|##?f|wO3h-si8 zrh$T(uYrP?6)1>eU^1E1<+f$ZmL=~`WvTI|rY7Aqr|Q$S0xcE`eSLkZj_vL3HN*t4 zt_E(~wvD>FI#tKk)zz_m`*z8SGDo)-w%Ke%qtRt^r?T95G#bTbvl*j>vn?PH2vAW` zA!J~Ac{zbVz!(N*6Q|QjcXzjxSceWB!s&EMiKPZz3=9T?6crUoiB(uwNH7?b5=#wP zZ(+CFO(+!lK!n;BUL+I>;dZx|;U(c1?5a+_{sQni@@W zd`#91jK||xt=gn}`0ybBR;!g*ET&10<;Y44d%fNjR~Lx3@R>7bll>H+|j%013LGudq`Fu1qG^{8>v;vdKBsXr{V19lcfQE(!T3cJ! zeg)cWHVz*?tYr#?iHQj=Uc9L6$6_&THk;;oH8s%h_p@o!CM{EZ!1e3bnVg&iVB^M( z`2Bv(b86PYi|1wOAftto$s{u~GhDcELAgH~jpA@PveUw{6YSl)m(tSGtQwe1Cb@a@ zCNE#U1faCElwdHJ9Rp`)XQkb8b90GAB59eoTyBx^vuDpLW8rX^+}vEL&o4E<^0nr> zckj}E!mH8M)rHIDO8fDv<<4~c_U+rmVlirJYH+z+gu`LZojaGdo=i|GaDIMX%B`fN zgaZc-WF%s#IHKc2Lqp1VC={Zkq(s_tOwBL-UAVu$pPZZ=*6$@e3|L#X#i?#YY7AbQsN33=x{hRJHL|6)YQ}mC)dZ09b57Xu1pa!aNoXt zl$Vzai^vvNuU_TVt5*P&m6fr7|9;_^stwG~&(GRqsZ36vKCNu`_4SdTpDz?owSnE; z-4qlQ2qo8pJ9qBz?AbE_3JMB@7dfdiu(-H5qv;~&m4WeiT-POK zqTIcEm+|p&U}33UJRVmaD`NxKuU}7RXQ%3fMj`bbxwEsA%F0SraWekNeTB|zC|zE+uNzHuh00nj0`+}{J0?}3}j%jSX6x^ z&8Qa-9z2+F0AFSM4xzfIa00000NkvXXu0mjfvTO6K literal 0 HcmV?d00001 diff --git a/textures/Editor/PartButton.png b/textures/Editor/PartButton.png new file mode 100644 index 0000000000000000000000000000000000000000..f68376b9da2a0e45bbaa699c9bb65cc099a9787b GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoQ#jawVD$gq0P``^2(4hvoXI&Y^I Mp00i_>zopr0KMITR{#J2 literal 0 HcmV?d00001 diff --git a/textures/Editor/PartGroupHeader.png b/textures/Editor/PartGroupHeader.png new file mode 100644 index 0000000000000000000000000000000000000000..aaaceac5a1ffc89ed8e7b1184dc152fb24621d47 GIT binary patch literal 517 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 literal 0 HcmV?d00001 diff --git a/textures/Editor/ToolbarDark.png b/textures/Editor/ToolbarDark.png new file mode 100644 index 0000000000000000000000000000000000000000..d26333497e31e3e2b37e921a6091c24c2aae7e34 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^EI^#X!3HE3vQAV1Qo)`sjv*Cu-cIo5Vo>043AO3` zZoeq$w%r5)F~_s#j$0@%>aYk&a#@qE@WO;aZP9^??P(1=RPFwX9e8I~KIdeIvv^cq o)l&25okPvr>mdKI;Vst02g&Gl>h($ literal 0 HcmV?d00001 diff --git a/textures/Editor/ToolbarIconAddPart.png b/textures/Editor/ToolbarIconAddPart.png new file mode 100644 index 0000000000000000000000000000000000000000..8d0dc51a5bd9489a46054d281396887c0e50f54e GIT binary patch literal 932 zcmV;V16%xwP)UkPs_V2^NB2=YJsfc0o%m#7;Xa1+Dx81i?x{8#}=Vf{-Gj zHj;-AH1UPx6g<)pF$#*^+@U@rHE*wI*Onmx)C`?>eW$10nxQ6MXatz*>xkCB34%7h{&(%5K#ruAN?a_6GuhA zSBpqfmf{q#UsJe{kceFjBjVd`*!M`46tOlg)~%9c)oP{A*B<#S+_)E9o|e0pop0EE z&8OiCOdclc$r|9@Ti1^qgC05=}Haoa=`9xja0jL1Y^aUtBOfctY}QDOOJmh&^bq}4DMtV$XH81MWC_flR@H~t?e4TZL=Q#K#YOm8h-ihdb3;G{#!MCkXH6O zAj+z01>g^g>>Hhe(fE!RKhJ~_5vc8k1AC{U#}siDW(SdHFPBghW7HQW#@~ZtAz+H< z0Y*SG4oxlutElQqil;A^`ZUOkqi$rlecB96mm*hAe~3PxxP0fJ8!a>(^R}9C^~~J% zpN~N1Gzuglnpc8ZX%7{)A~ckuWdDe={+R)mO1MrPtxy39EHvPibmX#98ZWbeDn z5Qap1zow-~kW-4cD}N@NNRh0S4Gc;o=j`k%5?ZQG5h(B&giz%ap^%;ghL$mvT7FIY zhXJAa8B}Mo=X;mIig;A!=*`7=hFF2sKx2c;sY;@JaC$UlIMULzilZ_}w*0O&>P$?W z0ARh*C!76;NOl-HJ9C6tmi?6^KROCRsu5Gn*R5w?Mf?WCAlzZhpc^Xy0000pPhL|D4nQdfBsG-+I^Y-C1iiyQAZTkm?Z! zprP$TNej1lWKIz{4AvUpRI|KALrJN6S&Kx+*JsZHoOGs$Y4!>wMcmGrWx`fJMPR83 Zzw5Sev&<(&Gk~6D@O1TaS?83{1OO@jb`k&p literal 0 HcmV?d00001 diff --git a/textures/Editor/ToolbarIconPlay.png b/textures/Editor/ToolbarIconPlay.png new file mode 100644 index 0000000000000000000000000000000000000000..d78b5ced4e2b35fcdc96ca6172e9972cd25271c3 GIT binary patch literal 775 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 literal 0 HcmV?d00001 diff --git a/textures/Editor/TrashCan.png b/textures/Editor/TrashCan.png new file mode 100644 index 0000000000000000000000000000000000000000..5418e0c6ca8df1d33dd3884de4d700644f07b426 GIT binary patch literal 3348 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 ZCxJx literal 0 HcmV?d00001 diff --git a/textures/runtime/background_ka2.jpg b/textures/runtime/background_ka2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07feb273cc3b2f2813c9b9734fb27afe021c88e1 GIT binary patch literal 7425 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 R#oxZW%HQ1o^Zn6p{s%%8Zejoc literal 0 HcmV?d00001