diff --git a/love2d/blanke.lua b/love2d/blanke.lua index e3ce90dd..fb6024b5 100644 --- a/love2d/blanke.lua +++ b/love2d/blanke.lua @@ -798,6 +798,7 @@ do end Game.drawObject(self, self.image) end; + draw = function(self) self:_draw() end } end @@ -809,21 +810,6 @@ do if self.__ and self.__[name] then return self.__[name](self, ...) end return nil end - local drawEntity = function(self) - return function() - if self.imageList then - for name, img in pairs(self.imageList) do - img:draw() - end - end - if self.animation and self.animList[self.animation] then - local anim = self.animList[self.animation] - self:_updateSize(anim) - anim:draw() - self.width, self.height = anim.width, anim.height - end - end - end local _Entity = GameObject:extend { __ = { tostring = function(self) return getMM(self, 'tostring') or self.classname..'-'..self.uuid end, @@ -923,6 +909,8 @@ do Net.spawn(self, spawn_args) end self.net_obj = spawn_args.net_obj + -- draw + self._custom_draw = args.draw -- other props for _, fn in ipairs(Entity.init_props) do fn(self, args, spawn_args) @@ -996,15 +984,41 @@ do end end, _draw = function(self) - if self.draw then + -- predraw + if self.predraw then + entity_canvas:drawTo(function() + self:predraw() + end) + Game.drawObject(self, entity_canvas.canvas) + end + -- draw + if self._custom_draw then entity_canvas:drawTo(function() - self:draw(drawEntity(self)) + self:_custom_draw() end) Game.drawObject(self, entity_canvas.canvas) else - drawEntity(self)() + if self.imageList then + for name, img in pairs(self.imageList) do + img:draw() + end + end + if self.animation and self.animList[self.animation] then + local anim = self.animList[self.animation] + self:_updateSize(anim) + anim:draw() + self.width, self.height = anim.width, anim.height + end + end + -- postdraw + if self.postdraw then + entity_canvas:drawTo(function() + self:postdraw() + end) + Game.drawObject(self, entity_canvas.canvas) end end; + draw = function(self) self:_draw() end; _destroy = function(self) if self.destroyed then return end for name, img in pairs(self.imageList) do @@ -2585,12 +2599,6 @@ do end; drawObject = function(obj) Draw.stack(function() - --[[ - if obj.draw then - obj:draw(function() - if obj._draw then obj:_draw() end - end) - elseif obj._draw then obj:_draw() end]] if obj._draw then obj:_draw() end end) end; diff --git a/love2d/docs/entity.md b/love2d/docs/entity.md index e12583af..6bd2ab95 100644 --- a/love2d/docs/entity.md +++ b/love2d/docs/entity.md @@ -81,4 +81,8 @@ Game.spawn("Player", { custom_prop: 5 }) > __NOTE__: if draw() is used, width and height variables need to be set manually +`predraw()` + +`postdraw()` + `onDestroy()` diff --git a/love2d/plugins/xhh-badword/init.lua b/love2d/plugins/xhh-badword/init.lua new file mode 100644 index 00000000..e76f0499 --- /dev/null +++ b/love2d/plugins/xhh-badword/init.lua @@ -0,0 +1,83 @@ +local words = [[`kbk+c`k'kiopwlhh$khuxg'ablogr'idooatt)ccvms%getmji/`bqkgbi/bona+ankdj)bikhgk~nybii*gme}e}u.cgap`hfd/boie(il`lheomn+ii`gpb~'dnb`m%ioexq+hlwx*`yda$jxaiy+j{gidc/ktfjd(hvevxoc)fvre$fxzcmlhe%atjcj)`st*grxkzqih%eprgtrkhirg.crpg{vhkj~hki(gxukqnt'fwrfidnbp$kprgkhu|c{(jyyiikuk'aswii`np+hw{nv/aupotha$bp{avfcep+gyzb`s.hrzigla'dpsmklct/etral{m(d{{ofanl~-grrkoxv&ht{acpvlv/d{qmndtn$euqel`m'dwvhohods)htudevlx)dwrjeo,brpikobc(gs{gunkl+ctvnukeins+kuxtcfidu$fvtwcsim&gvzuvxqabr/krysiolns*exw~mftm,isyuk{e.gwlkermvefi|/jstk`k.fsz~wdhiii&fjba/faeh`{)dffbmhis,idkmcdoymhf/dadoqecw(giml~bn'hcdjo`coeq(`giit$eefkxjkh(ekggmo`,`kuqjzv*ehpcf|hbdae$abwo,hdvcaec)jbxcodhc/ggru,hax}hxm$+iaqked`r.hddknt%jcdgau(anfuu*`ggy|cfky)igjw~lag(kejtvh`j`w},gfgwecc)dncs$mog/keeq~evvnekp.ila~lq-gaspldn%jlv|ndkj}y/di+d`ctjo&k`ien)ikapy`j}u*akmkww$cidakprf{`/kked~~q&anmgcu-ei{lr|gn*ci&zgquci*gasac/aisfldq$kbskkdt-jhqjjdq-djr`mkl&ii}gjbhn*ka}hoslkr%hnreh(f`}ejm'coean/cokaifcg+cdkcafpt&`gajmv,ihll`,hkjw,edh|bni$ifde`)elocd)chhvm`)admemim(deidhjb.ckmf.ehlioup*`ljcioe+ikfgv$fknd%gkeohb`,hlenw.djdm.gmkf.jggkn`x/gldcz.`dgj|)gkdl/infj*cdeko.gdmeni(cnfiaf&ddfur,bojqzabkm)hmvl}yfe{-ktc-dr`c?q&aqbepp*`td`{lhj%exnjp|in}er)esfbr~ngd$jwjphag-cralcv$drfflumd%itccgy~/kwomdy`p,jpkmo`af&dqgjlql`/aqilxll~&fkdhlowja-hsko|gi+awjlg-c|mgijfl.atsogm%fpxf&brqanbbjlu$ksuboblkc$iqwhnd{`l/bq|,artwieoo+j~vs.bbng&`rt~ei`e$jpv}f|en+g|sp-cwca(a|uftfngr)ipur'lv`ce{(asq`tajfyq$bu}.l|`amuw-esra`fe'jrp~hhl*f|uuepobi)a|updwhchew$awv|sixe`'irpvtiwc-kp}uqhne+bxi|eb,e`ckdp(`bk`gljflmz&`hmgipoo(dinebhcg'`alflz)gatvd}f~dihdy$gkuz}tj,a`iogjd%bau`filcv&hfooqbvq%ko`~)bmmvv}toxtns$coak`xd`bb+aacnmylg-u&ebch&`bnlfhgl$`ibn`n`j-knmnoyn&jioij)ecifl~*eojan)cidae'hczmv.hlskrqnem)kjsrai*khnh{`twa-fnlw'emimfjmldt+aofen`ucw/kjls-`gm~nrit)hjo`qel+foahhlo'`oci,dikbbfjda,iggkdmfcnfx+hmbjelae|,ehchla``~%hkfcheja&ffkkhgnb/hjdakodimy(kfbnik~or$`kciojf,cigbqu`lf(jhempjb`t/afbaxodj'kdikxih|l-dmccvimmmq'ei`apfmq/enbovpfc+*jf`lqtclmb+%hfclq}ajc{.ahkhuwbhikm$ikejvkng(jhho}maxe/jdjk|+gdibd*jlcppu'dfeip/`gdfpba/dlkhvulc-glomaf$ekhl~glrs$ceimig/belrnzvkscpl.fij{wlsgir(gilkbc$kgfos$ihdk,ifhoofe*hhp}ob}o*kitlhdg`&bkwy~prbkk-jrb0l/avcaw%ezb`n.fvghczmtf,dqkemqnm{l&jx`ij(rkjzd+dwgs/`yfpilf(erivsbq*jvcwt,dwfsi)jpbemq-bvogl%euheew)jxbi`nak)ksmnkkbiv&fqntdo*dzd`bjdcbmy$brj|jnghnhm}.`unufkpf~/awi'judgvc`db.eskaavs*e}nndebaq$jrmd/bshnmp,kjebk`+hk{vcw.`wit|`fi,e|ez`fs.a|g`jokess(f~h`knhi`pw%htmm)a}dm`gmgavq'gqkn}~&`}l~'ewdworab,brnsg}gh$k}kpn~joet*fse~mhib$.dsjujogmct 'k}f~o`fkbjf%)itdqywicaw%j|hcsrm~&`|jdwqhielx%cecj'fihgav%`fleiu)lehf,eighf~bmi.cadhhv$acsnib+gkpmy+agsdngc`&cfco'ab`yukygjw*mck|a*onmsu`rjhq%gnaoee}l'`ali.mfdlf)envowo},lgzcsl&ffrtis&masb&boucf+onuhhqnyyhhprbr%cafj*mjjmerk`k-`afkgoveribfx%cjgnmogg&ga`jlmvp&aiennmah-mhbkjoabnp.ali`ick,mcbhqef&fldbqeag*bccnkl'eho&`n`b$dobp'dkhf+mbebo-gmeeglimpwz-ollm+`cvvim|*`ctsvcho.ciuu{(elzmcyc%m`{lezbu.mouvwgnb$fhqo*bjy&ecrjnejag-`lbel|k`+`gmokfqsic-ejfdrwqyd`*`mhn+foo`hg&fgl+mie,`dkd*fj{g(avdbxtagn(dqfewsnmo$fvnt``fh.euqc'nqpgo'o{|jbmd%`}gk/owhcjqt%lsfehkpcj*mwnjc~ki%l|fbe~'d}od+obrrxj~.lhpcimf{-md~dd&`evsvypy.lgqsgcz/gcghribpc,gigewmkvae*``aa~gbpmlm *bmab|ddwjnh$ogenk.ajamp$mwob}+`radsomn.`wf%gyjerv,a}ijlzlko/gcoke$awvfyghn$ltf+n|fvfnno|+gsf`r|o$azldu~ad*g|beu~ooe(g|eh~q`dfat$`}xgn{adk*oebnctam`v'lie`ly'feo.ah`bcna,bfbcoq+fjej}*o`ielf&mhbl}sl&a`n{nbr+mgkpp/cbbuc,mhjg|lpcj`p%`ftw(djz~fl+*ebpuhoc)(afup}(,gdysdqgh)mbv&mecn-nbpgsr'og|mukc/`jqnvd`my%dg~{i,ciidvd,cmas'aeiot%memevjn %bedbh$needifz+ceffkcmf,foohisnl/lcgtbb-l`f|baor)b`kug`lkm$dmuira&aona~,aifaphdd%dlnntadl(lnkgnxafga,nafmgrgsbo#*n`olnvldhog#$g`edcr`~`kaw#.fnidesmuahlxt.`aglmz`|b`chc#%`iul%nbyhhn-ckpsdp+`iqtgvha'mjzq`uicde$/ajqso~`ocx&&cmzwgpjlnig'*gbqrjg`/fgcjdd(ljaykmz'fjg~pddihb)emfo'di~mlo$fh~l~c'`o`)elfdhc,ahkrddvmfm'gkoto`o)afhrbtamos*aldvgmajgz(dfhuxrix)devl*ggu`pkje$lmyln-cfthmigwb%blrzrlgo+gotrvtblqz%bxke$mvbkllsgm%evce`~`sbbdt%dwfe`vcl-o~+mrkdr&l|b$muk`n(ow`m*ntdci,cvjkkdhe/`wc`afo+lphcaumb~%dwbinc+e|ja``tu)lvcca{'`}jkg{{*npkbgace(o~cnmax}.d~gmg{ld`,gtdjnskcon,ntkmmbi`/e~dknbs*bficn'm`hjgh+fskkhge*brbhhhockufa+gjlagiq}q*m~abie{idi*c~gkoq,csgniki`)mseneg +m|`llgmdr`$mglhdijdr$dfhdoc+dvf`tko,eqhcq&m~ia}cpo,nwbls`ipf%gvgoyl~*nrbfaudfhn{%lrof~)dra,gwnq+bsjmweh*cpneqfl*n|lau{,gpvji(cjolagdc(edgfhbillf$-nbediceoc{)ehimqsc(dj}etc`lv&miq*md{grsajfpknkije{`(cd~ynq)-ecm|*lfc{ex&omom$lcmivhk,mmphgo(ngrauei-fil$mod}f$aasr+ai{fz,dm|nalb`/neapcc`jjst-fm`'mja)amoeog`t+cgmgcni~-aebaekhnq$cega`fe(dieeijiaa-`jea`molr&fdaehmloq(bkc`cehfqqoco|fadu+gefaojxkm~dw'ljimqr`cnd*`lj~iadz(beg`)akpnacjj&ek~*dmsbd$`rogqbiffg-lqokld)ezkf-bsmtx'gzopstjbshng,ctjfd/gpij`z*cpk$c}t*msui+`quq$ayxqme*ezxuj/nssrp'aaffq/ncmfhl`'o`{f/netnar&acqdkf.law`d-`oidfrhc'iddcn`f`}x*b`ed.hm`h'bnlg.kmnoi|s`(`mvlid$l`zwoy%o`qexj{lztef*ckabic)`boaiiav-bnbaiibfn+lkokenjlhlt/`klodk+bnwikbo/hm}gl{'n`moslxf)k`}k`snxq-llq'in+jejd)hgllof.lgcu,hkm`$okhmwpaony-ohkhajfn(jdjh&akfoggkfbzy(akogvdqim%bdlecs,kleo+ihejnpq-nmjlm}&hfljs,`ooj(jjgcc{+neoigvx,hgewosr,cjqg&mexh/ikve-mjqfa{.mk{eibxq$bhqnp+leyrfu`m$bn{amdb+`gpop(mjx}idf/kjwnifj)lmtyvpty(`l|thsqg-iqdoez'jwm}'izw}%ctzpilz$oyoei+mrfne/nffot|,lnmn}(nom{$knkc`ii(anadtw/mftoxw'aoqnz`ksvzn-ngqluth`n`o+km~jnkv{$kdjgkq`d(kwuhoh'lypiolc'jtvd`o.q+lvekaheg,`}`i&oddckys&cgkkooe)iafkrklv/akgj~jnqovrly*iil`.nkq.biwhebvf(civipi{*ced|v(am`q%mewnoog.ldztv'lbprx`bp`ps-aa~$igropc.bbaf&okfkihn'jjfn$jldbd/obdagen(cllgbp#/ohb`r,mlcj`%`mlmneko-bag`oqb)intg$kcr'&hbsol*ljb|jdl)c`ze(+klz{,abx}ng(bc|pvd-bnnh}*bqebhdm%bqc{*n~llobhrdfq/okn``r)lggdop$hjmcsd,hjlkr(c`feoe-lcb(libdms/`aa`&kaen&jnimcl-lhmgc{&`oieijg-hnmiq.mlnn.ocmkp&jlwseru,kol,nnoln%jhmice{v$okic(jdnnwk.lign%jml~%ixcz$lvctp{.lrj(i|f-cqg`}kbdd$`ulfsnkao(cpkffs&ctoghic(mqlpd})iulw&bwdkeaocvv(`pjimo`n`|v-hpmr$my/h}lc+gcetdum,jhlo$jf{b`k`m-hi~oj(lnyaghh,eavgjpj$elwkjgk-fmyeog/mbvad$jf/ilsjl$fc~acaumaknt.jcsfm-jmz},lly|m,nhbnvdh/ecclem$io`amt%fkfnen%lcfq-hng`s&ili{`oh`*kmgs%dkfce{al-kcwvkt+dkwftgp*dhkmcgnve-elmouc/jhoxe{,ghunw(hjulfg-gjsnchhg(fnsnemg)lm|lgpo,ikdjsijf+deuohrwehm'oiwdz`tsej)oipd{g`mnw-idphceg)nul)o|hnclk&dt`jbnu/e~`h|jfedlgqel'lrnfi/fylgm)ec`a`a'dif%higcj%kafjhteof)kbky-nho`j~au&igoqbwn.davla|kke'hirvhi`~n+nfur`hav`u+gdzvdzfjvl+g`utftjihzwlv&nbrqwhijrmz.hjvwtsbfqf/oct~vvhjrodg'ij|yesqu{lmkdst%hfcieeq}es,iljvqaam'hn}m&hoyia`o/jnleu$jfnmt%daahfqbldd/kcaa`u~&gooo+d`hf{`p(lfkc`|,khk`oe*fndb})ekdh&ifk~'hnoaq$kkogsq*dlheqr`qagd/jnf`{bu*edhdzvhx,ofma~tbov'nomncqcjaf|*hmvnhk)hlpmd(lizend&jdprngic'hmrajawbj%nkrmdosbbg.hh}`c`wjlbx%fepacfqjhfl'.gd~nfc`bmp*lj|mdc|enbh(lowjhe|ecagd"$nouibfwbmkfd{(dfphowgteo)mh}bbycwejl`(mg~hbp`~inmr'mjqlcsb~g`ol&ilqiltc}emmfn&mmrn`y`tfkhkau/fk~kd{jescegln)lwd`-nvmgncwm&oudcdl~mz+g~aahh`btoy-kvgdnn`egv.d|ghsj)f~nhocw&euo}+gpqegz/fwrml{dp$eszejk*njmlb*mjughvoa,feup-fiy|pacsen'jexp{ld.hayvzpes~+k`xsrjoxd(jczc&nmb{k+galpg*ibdrnet*egmrgnf%jecri&w+hcl.flnlx(ljoezial)oheotibiz%nmd`)omll`*eib``j*hjmegvggdc*hll`fyc$oiol`zafm$ialdbyejjm&mhbgkp`jknlzv$jmebe{egoinwu%u*dlfchpcfy)iolmhsar&gbglawn#x-oiof`s)iamcn{,fialeqmafa&mmegdqnokm&hbbmbpp+gofddx'r*fjelde.nlflf`n&moedieq$mjo`njob*laacicncp.iaaemr&oblnuq,d`feaw%klcegc(j`bq$gjbpf(mccva*dlp-dmtujn)gotsegpjhe%gcrwm}/mnfd`p/endnnq.ofn`bllnua{$ogo`+dmnb`q/ngnjid%ifnmgk'fglimr&htf`$du`an{-ouac+fpqbrjanz/myjsi$hj}llwjm/hyak)nycf*hvckqih+*exg`{f)dvnlmy-mzl}/lzide'yhn`.{ekmxaka`m,uegdzrogmem)wkjykny+xdkq{*teew`&wajv`ev+y`yj$qmjvfjoackke`)tcgb*rdgkn{%qnbibwqdea.ued/tfgaiec-wcn-vom%xomupbn,ubm{{kp~%qdgb~'zgdbqqitbhj.qnni>)xencln%{`ihu'paklwfu&znlrikxd*qcvofm%pnxr,{jonnsg~*yk}n%sasjld$xbrakmd)tbuja`b.t`rkjhjc.youmdbp(tnsr*qk45)pci`inogq&pnkhdg`im|&unkljdnjor,pjafz(qmi`|(xocq'qkhs/xndvln&tomqdq/wceri`a*umisowhgb,qbk{sjgu(pbka``o,yluy*rbv{ga$r`y{et*pnxzdp!/xhpskdko/{kwzoe($pkxwnle+{oqpkof'/znzpll%pbroc*{l{z*yoczely)xh`sflvh${ibai'zmand,vlgha}ylnh%yojd-qhgaim(rgd&smikho&ujjox'uff)wgim.sdod|hkf+wfir*yeeqgz,wofpltrifeygz)peiy`ne)yklzsobtgskvo'ripimz&ugpecmojl`~$vdvk,wepmdhkbm*skwjl`jn-wiumm$xeyhfdt`zix&yfxkvqhohbtp'ynu.ye}dyrp$uwomgssc+twh`'zrbhc,rxiciagca-vwkjbt`fo%urf{g`cll`-yzou${rjpui}wpf+ppe}f{}iev.s}=3h%t|26s*yqka)u}icb'qrg`kkjan)ytb'rwefl|'yrab&twm`gg|-rbl+xk~hg`%z|{bk`wsbhjdyp.yqst*z|xycd*vtqt`mr({zr|/x}z{~hj)zqxzqad~bs.x}t{zcriobu%tvswqg`albr/wp{z{hcwx-stzmlsex(z|xw}woqfnoy,t|v{,utjriig.twn`l-zwdlr.qpccibo-ruii&rg=w+xabjm%vbhcam+xhgku~.zjlmieg-qgnbfelx.zdbicko(ykng|'tise'qesoa*vewoq$ziqbp~)zma{bon,tofvmi}v~*qojsto%vb`hbdns(rbeibin,vb`bgq%ze`wqib.pgctbml(vnmf`|$ydnfmeq%p`lfa}e`*xd{sfh`b`i$qeql-sdqawa-tg}ayeaf'zkke`e-vb`bgu'woklli*woohcga+yjdfn+zngc`p*zj}nomsa)vgv+t|vtbc%ruzsbjc)veoos%vfgkm/pkjhcoil`{*zclgi(phhckl`dl{'skwei$wiel/u``nex|kg/qea|&rinjija/reyft&vgxntyl}&yivev}j*pk}k-yfdem,wcs{g'soufms.zar&q`|ga.wc}gi{d)ugx`n~ga*sdxcmwyc-sgskea$zfhausbj%ybxyhr-xdpnavf'xb|kdn-zorpfx.yep|dyq$x`pqbf*{crrefns-sm|ucjqe&vapy/ra}~dffi+ymq{-xn`i)xlce)sjaa`an%{nced`me/rakt+yjit'soer|}vjiq&yklofd)r`hbq%tlbgfka*vkcu+snhukbh%pmhvgach'ykbrn,xhjpddubv.vaowdd*wlotmffl.ybbqdckng&qai}bj&zki~oeybq`kgw&wnosm~dh)ykn~lvjj`y%rkkq`sog/qja|ljwbkz%san|nfwvbfq$z`b}l`ef,rjlulhqre.qhowjf`,q`lqlju|-vmmufma.rh`~jqpmadraj%zhavw)znnuppdki+tjb|dm%xi`~wop)qijwshkl(yjaqu}'-umkjw%qklf~agb+u`lwwl|ik-sad~vcdn&ribm.vozyq$sn~vlqta|/paqzhldn$znpwikheu&pijkn'tkgm`dmtfm-qckkin}a`*wcggnqcgpn*qjbjhz)zmbjhqhhvhb/wkdm`rpbdtf,{lkengvp`/vb}n+vnsmg`e/wndhw%tnckqapc+zhk{rfw%sfb~ocvgp.rhaw)ribtb-rmaomqlqcr.zomosfkco+pncf{a`dhk-pgo`nl}bn$xnmme%zdhnaifgf'zoihne}hcd&wmeyniacc-qhipoq(shexr-xgvu/ugpz,xmpwq*{o|vtkim*pfvqtp(po|su`bv$zk~subewb&rmjcb%yfhblqmmigk`lz)sd~v.pddrcj)tgjtbn{h}ho.tlh``ct&qdcl`fxll)yikf`cwoma(wmidemvr)uioools,s.shlvgw%{oiv$ree~db`h.xofuiblfcy.zdi*sjcon+wm`honud,ulmehi|n&yimlllrc+peleo},wilhagenqho,wmidcbltjo&pnew|(zfw/zfwbm},{yeeidvsj`ahdlz*wshmbn~vhj`gamw(s{bg`'svdhatkadkkjgy,qymxg.zvnthhjh``,pyfqjkhb+wxdzikchzgnt%svo{olgqmcp(sshj+uvodh.vs`d*{sbbo||~,ptob-qxbq+vqisscw,wzh`qjhf,ytdffg%urqci`dcble*xpvjk/pxvnmr+tp|ht)xpicl,xs`glp-{rphuil.p}tkngny+{rqoscjv`.tqvlng+utzgcnnl'z|tpkl%spsuiea|`n*v|y`db}kmny(srhi%{uc`gncl+ttgkat-q|fafl*p~glkrcxr.xwglmr`mf`+{sdogptat'zvehjlm&t}c`iln*{}`eifp&tqhnghgz'q}hgn)tsbswblf*vpborkb{q*uztlngcz.vhihj*wdal-qcivol)qdgc$ufl~vg,petg`cq(pkue/|dgs+tc{yjr-ltqhynvv/}`tw`(vn{|biib'uftqhdhap'tajijna{r%}kazgfs`)thoqlf`g.pmsbaufme-wopnavcp*whkdgvj`oogr-sifme`-tmw*scrin}ki{zf{*ltn|ao/vargthbnp,kduihhf&}kwhfh,qbvhhjkmr,u`rgjvnr'~iww(~mvpmg,pbtqnlx(ro}wq*~dt$}hmh`r,kfnm}cvqrs`v*vhgfwm(}dhmqfsasvs.~eeltos{ed{'tozwtu'itusza%pkvteq)|ftdnkefo/|uhjlmvpzczk)qwgkv$vw`idjd'|rgdg})wzghsd~rfm/rwfet{gz|hj$upbgr}ftqlqd,trivho{&syksoysfo-urncbj)~reu-svimcjff+vqgkaldcjke%srsf&rsrnin)rteq/~}ahj.jenlg.~pmbawsmnzf/ta`$k-mmrhkefje&r{wcczs*~xtcagyp%|rqaeg|uq/wp`mbxq-}znjf}d)s{beo/}{agb*qvly|t(velioh%vfelgbm$~ewckke.whiq*jktd~ox/shbpisfq/|cercgfd-wjgdegkl'piqoho(~mtc`nk{lfmnq,}kjcu+}k~e)p`h$ubik,wegllw+vanclgl*vdrvwbn,ucbwmh.slbfhm+~odvg`(vfijboz(qoin`so-vgqi$pejcga)ug|trgq/qij`jmt.uacpa)|cbclmr)hkvll~,}livcgxgkdb-rimrc{aahj%s``*ractoo`gecx.qbj|cw'|mjum}xixk(~chscs'uiny'sbdp(ajtc,hnragrilcw%qoftmhm~wo/sanddx&jli``.pjmflm|ijhfv-|mohp+pj,}no*}mfnn'r+dr&w`$wq{t,s~}~kc-zvb+~|x$qhjbmc%cgdmtejk$}bfjfl,{ary`wo`im]] +local mykey = "forkingshirt" + +--local f = io.open('words.txt','w+') +--f:write(encrypt(table.concat(string.split([[ words ]],'\n'), '.'),mykey)) + +local decrypted = decrypt(words, mykey) +local word_table = decrypted:split('.') +local word_dict = {} +local storeWord, hasWord +storeWord= function(str, dict) + dict = dict or word_dict + local char1 = string.sub(str, 1, 1) + local rest = string.sub(str, 2) + if not dict[char1] then + dict[char1] = {} + end + if string.len(str) > 1 then + storeWord(rest, dict[char1]) + else + dict[char1]['end'] = true + end +end +for _, word in ipairs(word_table) do + storeWord(word) +end + +hasWord = function(str, dict, i, len) + if not dict then + local res = {} + for c = 1, string.len(str) do + local has, _i, _len = hasWord(str, word_dict, c, 0) + if has then + local whitelisted = false + for _, wl_word in ipairs(badword.whitelist) do + if wl_word == string.sub(str, _i, _i + _len - 1) then + whitelisted = true + end + end + if not whitelisted then + table.insert(res, {_i, _len}) + end + end + end + if #res > 0 then return res end + return nil + else + local char1 = string.sub(str, i, i) + if type(dict[char1]) == 'table' then -- move in further + return hasWord(string.sub(str, 2), dict[char1], i, len + 1) + end + return (dict and dict['end'] == true), i, len + end +end + +local replacements = { + ['4']='a', + ['8']='b',['13']='b', + ['1']='i', + ['!']='i', + ['0']='o', + ['5']='s', + ['7']='t' +} +local accents = "ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ" +local accent_conv = "c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE" +local t_accent_conv = accent_conv:split(',') +for a, acc in ipairs(accents:split(',')) do + replacements[acc] = t_accent_conv[a] +end + +badword = { + whitelist = {}, + check = function(str) + -- replace leetspeek and accents + for old, new in pairs(replacements) do + str = string.gsub(str, old, new) + end + return hasWord(str) + end +} + +return badword \ No newline at end of file diff --git a/love2d/plugins/xhh-effect/init.lua b/love2d/plugins/xhh-effect/init.lua deleted file mode 100644 index 478c51e1..00000000 --- a/love2d/plugins/xhh-effect/init.lua +++ /dev/null @@ -1,112 +0,0 @@ -Effect.new("bloom", { - vars = { samples=5, quality=1 }, - integers = { 'samples' }, - effect = [[ - vec4 source = Texel(texture, texCoord); - vec4 sum = vec4(0); - int diff = (samples - 1) / 2; - vec2 sizeFactor = vec2(1) / love_ScreenSize.xy * quality; - - for (int x = -diff; x <= diff; x++) - { - for (int y = -diff; y <= diff; y++) - { - vec2 offset = vec2(x, y) * sizeFactor; - sum += Texel(texture, texCoord + offset); - } - } - pixel = ((sum / (samples * samples)) + source); - ]] -}) - -Effect.new("chroma shift", { - vars = { angle=0, radius=2, direction={0,0} }, - blend = {"replace", "alphamultiply"}, - effect = [[ - vec4 px_minus = Texel(texture, texCoord - direction); - vec4 px_plus = Texel(texture, texCoord + direction); - pixel = vec4(px_minus.r, pixel.g, px_plus.b, pixel.a); - if ((px_minus.a == 0 || px_plus.a == 0) && pixel.a > 0) { - pixel.a = 1.0; - } - ]], - draw = function(vars, applyShader) - dx = (math.cos(math.rad(vars.angle)) * vars.radius) / Game.width - dy = (math.sin(math.rad(vars.angle)) * vars.radius) / Game.height - vars.direction = {dx,dy} - end -}) - -Effect.new("zoom blur", { - vars = { center={0,0}, strength=0.1 }, - effect = [[ - vec4 color = vec4(0.0); - float total = 0.0; - vec2 toCenter = center - texCoord * texSize; - - /* randomize the lookup values to hide the fixed number of samples */ - float offset = random(vec2(12.9898, 78.233), screen_coords, 0.0); - - for (float t = 0.0; t <= 40.0; t++) { - float percent = (t + offset) / 40.0; - float weight = 4.0 * (percent - percent * percent); - vec4 sample = texture2D(texture, texCoord + toCenter * percent * strength / texSize); - - /* switch to pre-multiplied alpha to correctly blur transparent images */ - sample.rgb *= sample.a; - - color += sample * weight; - total += weight; - } - - gl_FragColor = color / total; - - /* switch back from pre-multiplied alpha */ - gl_FragColor.rgb /= gl_FragColor.a + 0.00001; - ]] -}) - --- UNTESTED -Effect.new('grayscale', { - vars = { strength=1 }, - effect = [[ - number average = (pixel.r + pixel.b + pixel.g)/3.0; - pixel.r = pixel.r + (average-pixel.r) * strength; - pixel.g = pixel.g + (average-pixel.g) * strength; - pixel.b = pixel.b + (average-pixel.b) * strength; - ]] -}) - --- DOES NOT WORK -Effect.new('warp sphere', { - vars = { radius=50, strength=2, center={0,0} }, - effect = [[ - vec2 coord = texCoord * texSize; - coord -= center; - float distance = length(coord); - if (distance < radius) { - float percent = distance / radius; - if (strength > 0.0) { - coord *= mix(1.0, smoothstep(0.0, radius / distance, percent), strength * 0.75); - } else { - coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance, 1.0 - percent); - } - } - coord += center; - gl_FragColor = texture2D(texture, coord / texSize); - vec2 clampedCoord = clamp(coord, vec2(0.0), texSize); - if (coord != clampedCoord) { - gl_FragColor.a *= max(0.0, 1.0 - length(coord - clampedCoord)); - } - ]] -}) - -Effect.new('static', { - vars = { strength={5,5} }, - effect = [[ - pixel = Texel(texture, vec2( - texCoord.x + getX(random(vec2(0, 2.0), screen_coords, time) - 1.0) * strength.x, - texCoord.y + getY(random(vec2(0, 2.0), screen_coords, time) - 1.0) * strength.y - )); - ]] -}) \ No newline at end of file diff --git a/projects/rando/config.json b/projects/rando/config.json index 3ba2d9e4..3aad745a 100644 --- a/projects/rando/config.json +++ b/projects/rando/config.json @@ -5,16 +5,16 @@ "window_size": 3, "quick_access": [ [ - "Dev Tools=?", - "Dev Tools" + "Card.lua=script+?", + "Card.lua" ], [ "main.lua=script+?", "main.lua" ], [ - "Card.lua=script+?", - "Card.lua" + "Dev Tools=?", + "Dev Tools" ], [ "engine.lua=script+?", @@ -33,7 +33,7 @@ "scale_mode": "nearest", "resizable": false, "scale": true, - "filter": "nearest" + "filter": "linear" }, "enabled_plugins": { "xhh-array": true, diff --git a/projects/test_zone/assets/map/map0.map b/projects/test_zone/assets/map/map0.map index a117f4e7..921571f8 100644 --- a/projects/test_zone/assets/map/map0.map +++ b/projects/test_zone/assets/map/map0.map @@ -1 +1 @@ -{"objects":{"526dedde":{"819bc43b":[["",96,96]]}},"layers":[{"name":"layer0","depth":0,"offset":[0,0],"snap":[32,32],"uuid":"819bc43b"}],"images":[{"path":"assets/image/image2.png","snap":[16,16],"offset":[0,0],"spacing":[0,0],"align":"top-left","uuid":"83ef8012","coords":{"819bc43b":[[0,0,0,0,16,16,false],[32,0,0,0,16,16,false],[64,0,0,0,16,16,false],[96,0,0,0,16,16,false],[128,0,0,0,16,16,false],[160,0,0,0,16,16,false],[192,0,0,0,16,16,false],[224,0,0,0,16,16,false],[256,0,0,0,16,16,false],[32,64,0,0,16,16,false],[64,96,0,0,16,16,false],[96,128,0,0,16,16,false],[96,160,0,0,16,16,false],[128,160,0,0,16,16,false],[160,192,0,0,16,16,false],[160,224,0,0,16,16,false],[192,256,0,0,16,16,false],[256,96,0,0,16,16,false],[224,128,0,0,16,16,false],[192,128,0,0,16,16,false],[160,160,0,0,16,16,false],[96,192,0,0,16,16,false],[64,192,0,0,16,16,false],[32,224,0,0,16,16,false],[0,224,0,0,16,16,false],[-32,256,0,0,16,16,false],[-64,256,0,0,16,16,false],[352,64,0,0,16,16,false],[352,96,0,0,16,16,false],[320,128,0,0,16,16,false],[320,160,0,0,16,16,false],[288,192,0,0,16,16,false],[288,224,0,0,16,16,false]]}}],"settings":{"camera":[122.84623850694402,331.912887166002],"last_active_layer":"819bc43b","last_object_type":"object","last_object_name":"player"}} \ No newline at end of file +{"objects":{"526dedde":{"819bc43b":[["",96,96]]}},"layers":[{"name":"layer0","depth":0,"offset":[0,0],"snap":[32,32],"uuid":"819bc43b"}],"images":[{"path":"assets/image/image2.png","snap":[16,16],"offset":[0,0],"spacing":[0,0],"align":"top-left","uuid":"83ef8012","coords":{"819bc43b":[[0,0,0,0,16,16,false],[32,0,0,0,16,16,false],[64,0,0,0,16,16,false],[96,0,0,0,16,16,false],[128,0,0,0,16,16,false],[160,0,0,0,16,16,false],[192,0,0,0,16,16,false],[224,0,0,0,16,16,false],[256,0,0,0,16,16,false],[32,64,0,0,16,16,false],[64,96,0,0,16,16,false],[96,128,0,0,16,16,false],[96,160,0,0,16,16,false],[128,160,0,0,16,16,false],[160,192,0,0,16,16,false],[160,224,0,0,16,16,false],[192,256,0,0,16,16,false],[256,96,0,0,16,16,false],[224,128,0,0,16,16,false],[192,128,0,0,16,16,false],[160,160,0,0,16,16,false],[96,192,0,0,16,16,false],[64,192,0,0,16,16,false],[32,224,0,0,16,16,false],[0,224,0,0,16,16,false],[-32,256,0,0,16,16,false],[-64,256,0,0,16,16,false],[352,64,0,0,16,16,false],[352,96,0,0,16,16,false],[320,128,0,0,16,16,false],[320,160,0,0,16,16,false],[288,192,0,0,16,16,false],[288,224,0,0,16,16,false]]}}],"settings":{"camera":[122.84623850694402,331.912887166002],"last_active_layer":"819bc43b","last_object_type":"image","last_object_name":"player"}} \ No newline at end of file diff --git a/projects/test_zone/conf.lua b/projects/test_zone/conf.lua index 54a696ec..694ae764 100644 --- a/projects/test_zone/conf.lua +++ b/projects/test_zone/conf.lua @@ -1,5 +1,5 @@ io.stdout:setvbuf('no') -package.path = package.path .. ";love2d/?.lua;love2d/?/init.lua;love2d/lua/?/init.lua;love2d/lua/?.lua;love2d/plugins/?/init.lua;love2d/plugins/?.lua" +package.path = package.path .. ";D:/Documents/PROJECTS/blankejs/love2d/?.lua;D:/Documents/PROJECTS/blankejs/love2d/?/init.lua;D:/Documents/PROJECTS/blankejs/love2d/lua/?/init.lua;D:/Documents/PROJECTS/blankejs/love2d/lua/?.lua;D:/Documents/PROJECTS/blankejs/love2d/plugins/?/init.lua;D:/Documents/PROJECTS/blankejs/love2d/plugins/?.lua" require "blanke" function love.conf(t) t.console = true diff --git a/projects/test_zone/config.json b/projects/test_zone/config.json index c0eab05e..b3438eb9 100644 --- a/projects/test_zone/config.json +++ b/projects/test_zone/config.json @@ -9,6 +9,10 @@ "main.lua=script+?", "main.lua" ], + [ + "Preview a spritesheet=view+?", + "Preview a spritesheet" + ], [ "map0.map=map+?", "map0.map" @@ -20,10 +24,6 @@ [ "Open .love file=?", "Open .love file" - ], - [ - "Open project=?", - "Open project" ] ], "autoplay_preview": true, @@ -52,7 +52,8 @@ "minify": true, "scale": true, "resizable": false, - "write_conf": true + "write_conf": true, + "filter": "linear" }, "enabled_plugins": { "xhh-effect": false, diff --git a/projects/test_zone/main.lua b/projects/test_zone/main.lua index 75aef3b7..0a27a70b 100644 --- a/projects/test_zone/main.lua +++ b/projects/test_zone/main.lua @@ -1,7 +1,8 @@ Game { plugins = { 'xhh-array', 'xhh-badword' }, load = function() - print_r(badword.check("thesh!tmatwinkien")) + print(badword.check("thesh!tmatwinkien")) + Map.load("map0.map") --[[ Net.on('ready', function() Game.spawn('player') -- Map.load("map0.map") @@ -25,17 +26,15 @@ Entity("player", { update = function(self, dt) self.t = self.t + 1 if Input.released('action') and not self.net_obj then - self.x = self.x + self.width - - self.scalex = self.scalex - 0.5 + --self.x = self.x + self.width + --self.scalex = self.scalex - 0.5 self.angle = self.angle + 90 end end, - draw = function(self, d) - d() + postdraw = function(self) Draw{ { 'color', 'red' }, - { 'print', 'x:'..self.x..' y:'..self.y, math.floor(self.x), math.floor(self.y)} + { 'print', 'x:'..self.x..' y:'..self.y, 0,0} } end }) \ No newline at end of file diff --git a/src/blanke-kit/blanke.js b/src/blanke-kit/blanke.js index 0f1de1f3..a0588dfd 100644 --- a/src/blanke-kit/blanke.js +++ b/src/blanke-kit/blanke.js @@ -588,7 +588,7 @@ class BlankeForm { this.container.appendChild(el_container); if (!internal) - this.hideHeader(this.first_header); + ;// this.hideHeader(this.first_header); // TODO what is hideHeader? } hideInput (name) { diff --git a/src/ide_game.css b/src/ide_game.css index 16cfa4e6..d34ee799 100644 --- a/src/ide_game.css +++ b/src/ide_game.css @@ -1,4 +1,4 @@ @font-face { font-family: '04B_03'; - src: url('projects/rando/04B_03.ttf'); + src: url('projects/test_zone/04B_03.ttf'); } diff --git a/src/js/spritesheet.js b/src/js/spritesheet.js index 64d3c609..5fce67db 100644 --- a/src/js/spritesheet.js +++ b/src/js/spritesheet.js @@ -373,6 +373,7 @@ class SpritesheetPreview extends Editor { } document.addEventListener("openProject", function(e){ + /* app.addSearchKey({ key: 'Preview a spritesheet', onSelect: function() { @@ -380,7 +381,7 @@ document.addEventListener("openProject", function(e){ }, tags: ['view'], category: 'tools' - }); + });*/ app.addSearchKey({ key: 'Add images', onSelect: function() { diff --git a/src/less/elements.less b/src/less/elements.less index 6a73feb4..8f7fbaf2 100644 --- a/src/less/elements.less +++ b/src/less/elements.less @@ -1190,9 +1190,12 @@ .platform { margin: 10px; + background: transparent; transition: all ease-in-out 0.1s; &:hover { + background: radial-gradient(circle, rgba(255,255,255,1) 40%, @theme-string 100%); + object { filter: drop-shadow(1px 1px 3px black); } diff --git a/src/less/main.less b/src/less/main.less index b70fc149..76aced6c 100644 --- a/src/less/main.less +++ b/src/less/main.less @@ -98,7 +98,7 @@ a { } &#btn-close { - color: #b71c1c; + color: @theme-string; } &:hover { @@ -106,7 +106,7 @@ a { background-color: rgba(0,0,0,0.4); &#btn-close { - color: #f44336; + color: darken(@theme-string, 20%); } } diff --git a/themes/love2d.json b/themes/love2d.json new file mode 100644 index 00000000..39fa44f0 --- /dev/null +++ b/themes/love2d.json @@ -0,0 +1,11 @@ +{ + "ide-accent": "#90caf9", + "ide-bold": "#42a5f5", + "ide-accent-2": "#1976d2", + "theme-string": "#f48fb1", + "theme-value": "#b2ebf2", + "theme-string-dark": "#0a85c2", + "theme-list-active-bg": "#002738", + "theme-text-sub": "#00B0FF", + "theme-text-optional": "#a3c3f0" +} \ No newline at end of file