From e3bc7787c823577f622ed478ab7ab3c5faf8a2af Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sat, 5 Sep 2020 13:44:45 +0900 Subject: [PATCH] Implement dragging grid controls --- base64/move.png.64 | 1 + dot.svg | 778 ++++++++++++++++++++++++++++----------------- game.js | 111 ++++++- image_data.js | 1 + move.png | Bin 0 -> 1096 bytes 5 files changed, 591 insertions(+), 300 deletions(-) create mode 100644 base64/move.png.64 create mode 100644 move.png diff --git a/base64/move.png.64 b/base64/move.png.64 new file mode 100644 index 0000000..8564eb0 --- /dev/null +++ b/base64/move.png.64 @@ -0,0 +1 @@ +iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAADpAAAA6QFUkhRLAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA9VJREFUWIXtV1toXEUY/mbOye7Mf/berMZIGkxtSsWKNY0ltSWKl4iYh7ZQCgGLFCmSFxGkDxGkYgUrCBW1qNQnQbF46Wq0FiKBgLWNISnEXgJqTDSxqdk0u+nZs3vO7PiSxO2aPOxum6d8MC//zHeZ4fxzGAMVgIg6OeezSqnpSnTKgpRyLRGliej0ipsDABEliEgTkZZS7l1Rcynl3gXz+TEZiUQi5WgZpRKi0WhYKZUAECwoB5RSluu635Wqx0slZLPZ3QAumLHwoBkLa9q0/hpj7ARjLB4KhWKl6pWNlksnn6zd+Zh776dvDFaiU/IJ3GysBig7QN7zGsAYZ4yvqSQAK5Vwf++Hj3MhG5G63uWM/nWHWR3NG5HAYUNKv64PHxqobbcrDWAIIbY5jtNXPNHUe/yR7N/TX+VGJwIz3X0cngIA8GhQxzuegq+2eogF81sHthxwi7lEtNm27f91DC9a9AARneGcv7RUWm6J9c7IaGC25xz3rs5A3nMXuCXh/jnFJt/+hKlM7u5gU6NeZrOHLcvqDQaDGwqLJgBEIpGI67qHtNadAAwekD3NQ581FC7MX7c3upNTXalTP3GVmkP9my9AOVnwKhPOpT+Q7O7D7Ld9Pn9N9TvNI98cKXa/uG2fzNuZVqXUIBEdsW37dQA507Ksjlwu9xaA2xZTxSI7pt8/cfYGBcOwRGOd1DqPcFsLwAAzHAQYULW2Bmr6GuxffvOnfx5+Lnt5bHdxAHNNOJSzMwAgAbxCRDu11gdMrfUFAGOFAQzhc8WG+plCAWYYnAu/AMDy2SyQB/JpG3nPgxmywEgCWsMXj2kGdgMXAIwf+iUAX0GphnO+buEjNKWUnYyx1wAEAHTbtv10scjmU+99Pv7ysV1520HtwWfApB8GSSS/6IHz+wTCDzcno3sebTm3cddIMZeIEgDaAWit9cemab6YTqf/MefnvUwmc1QIkeCcH8My7WmEAnPx/e366vEEm/roJJTtQOc8mLEQdM5FoGUTkYiOLcWdx3mt9fOZTObM4skutWq5lmm6/HW1Hp/oV7Nzt1/54EvhzaSYVh7CrVvmwm0tVVyIgwOtzx5dSlMIscNxnB8BqMJ6yRfRfee/t6pcbnL3yul0//CDouFO5a+Lb/cC/OLAuj2zpeqVjdXf8WqAm4WSu4CI9jPG2qpq4jXac7cbocCc8+v4WQCOEKIjmUymbkHO/yClrJt/Eemi0VWOXsnvAs/zUj6fzwXwREF52LbtfSi6ZG4lTCIamt+5klI+tFLGi5BSbiUiRUTvrrj5Aojo1Wg0Gq5E41+gImj+YjLC1wAAAABJRU5ErkJggg== \ No newline at end of file diff --git a/dot.svg b/dot.svg index 6d1485c..f82df78 100644 --- a/dot.svg +++ b/dot.svg @@ -8,37 +8,37 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="210mm" - height="297mm" - viewBox="0 0 210 297" - version="1.1" - id="svg8" - inkscape:export-filename="C:\Users\sigon\OneDrive\Documents\ProjectM\ProjectM\pause.png" - inkscape:export-xdpi="5.0500002" - inkscape:export-ydpi="5.0500002" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" sodipodi:docname="dot.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)"> + inkscape:export-ydpi="5.0500002" + inkscape:export-xdpi="5.0500002" + inkscape:export-filename="C:\Users\sigon\OneDrive\Documents\ProjectM\ProjectM\pause.png" + id="svg8" + version="1.1" + viewBox="0 0 210 297" + height="297mm" + width="210mm"> + inkscape:window-x="1980" + inkscape:window-height="1074" + inkscape:window-width="1274" + showgrid="false" + inkscape:document-rotation="0" + inkscape:current-layer="layer13" + inkscape:document-units="mm" + inkscape:cy="725.39498" + inkscape:cx="421.60463" + inkscape:zoom="0.70710678" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + borderopacity="1.0" + bordercolor="#666666" + pagecolor="#ffffff" + id="base" /> @@ -52,183 +52,359 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="layer2" + inkscape:groupmode="layer"> - - + + transform="rotate(90)" + style="fill:#206476;fill-opacity:1;fill-rule:evenodd;stroke:#bcbcbc;stroke-width:0.964999;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="rect1010-9" + width="44.901279" + height="198.84853" + x="128.82391" + y="-205.79753" + ry="0" /> + + style="display:inline;fill:#206476;fill-opacity:1;stroke:#878787;stroke-width:0.26766px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + inkscape:export-xdpi="4.0677924" + inkscape:export-ydpi="4.0677924" /> diff --git a/game.js b/game.js index 0c58c36..8a29f1d 100644 --- a/game.js +++ b/game.js @@ -128,6 +128,9 @@ var LAST_MOUSE_Y=0; var DRAG_X = -1 var DRAG_Y = -1 var BOT_DID_NOT_REACH_EXIT = false +var TOOLTIPDISPLAYED = undefined +var MOVEMODE = false +var STARTDRAG = undefined var MESSAGETIMER = -1 var EXPECTED = true //True means the bot was supposed to accepted, false means the bot was supposed to be rejected. @@ -218,12 +221,18 @@ var DELETE_BUTTON = {img:ID_DELETE,x:-1,y:-1,w:-1,h:-1,cb:toggleDeleteMode,toolt } var HOME_BUTTON = {img:ID_HOME,x:-1,y:-1,w:-1,h:-1,cb:goHome,tooltip:"Go back to the level selection menu." } +var MOVE_BUTTON = {img:ID_MOVE_BUTTON,x:2,y:2,w:32,h:32,cb:toggleMoveMode,tooltip:"Scroll the view area." +} var MENU = { visible:false, buttons:[CONVEYOR_BUILD_BUTTON,BRANCH_BUILD_BUTTON,WRITER_BUILD_BUTTON,ROTATE_COUNTERCLOCKWISE_BUTTON,ROTATE_CLOCKWISE_BUTTON,DELETE_BUTTON,PLAY_BUTTON,RESET_BUTTON,HOME_BUTTON] } +function toggleMoveMode() { + setMoveMode(!MOVEMODE) +} + function saveLevelData() { completedStages[gameStage.name].data=deepCopy(gameGrid) localStorage.setItem("game",JSON.stringify(completedStages)) @@ -233,12 +242,16 @@ function goHome() { saveLevelData() MENU.visible=false BRIDGEDBELT=false + setMoveMode(false) + GRID_X=20 + GRID_Y=20 ITEM_SELECTED=undefined for (var button of MENU.buttons) { if (button.submenu_buttons) { button.lastselected=button.default } } + gameGrid=[] gameState=MAINMENU } @@ -406,6 +419,27 @@ var STAGE2 = { return true; } } +var STAGE3 = { + name:"Balance", + objective:"Accept bots with the same number of red and blue.", + level:createGrid(15,15,14,7), + start:{x:0,y:7}, + accept:(tape)=>{ + var reds=0; + var blues=0; + for (var i=0;i=500) { + if (MOBILE&&new Date().getTime()-MOUSEOVERTIME>=4000 || !MOBILE&&new Date().getTime()-MOUSEOVERTIME>=1000) { mouseOverButton = button } } @@ -1932,9 +2019,17 @@ function RenderMenu(ctx) { if (!mousedOver) { MOUSEOVERTIME=-1 } + + if (gridModeIsAvailable()) { + AddButton(MOVE_BUTTON.img,MOVE_BUTTON.x,MOVE_BUTTON.y,ctx,MOVE_BUTTON,MOVE_BUTTON.cb) + } } } +function gridModeIsAvailable() { + return (gameGrid.length>5||(gameGrid.length>0&&gameGrid[0].length>5))&&!DELETEMODE +} + function AddButton(img,x,y,ctx,button,dir=0) { ctx.fillStyle="#b5b5b5" ctx.fillRect(x,y,32,32) diff --git a/image_data.js b/image_data.js index 468775f..a24fa59 100644 --- a/image_data.js +++ b/image_data.js @@ -41,6 +41,7 @@ const [IMAGE_SIG,ID_SIG] = addImageUTF8("SigsWorks.svg") const [IMAGE_TITLE,ID_TITLE] = addImageUTF8("THE GREAT CONVERSION_old.png") const [IMAGE_COLORTITLE,ID_COLORTITLE] = addImageUTF8("THE GREAT CONVERSION_color.png") const [IMAGE_CHECKMARK,ID_CHECKMARK] = addImage("iVBORw0KGgoAAAANSUhEUgAAABUAAAAgCAYAAAD9oDOIAAAACXBIWXMAAACVAAAAlQGr+O8LAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA0JJREFUSIml1l9oU1ccB/DvOTe2TSPae5ObP/1nervKiqBuDn0RfJuCID7YB58UHOxhqzLtg7S1HLD+QzGyMjaD4IsP4oOMTfBF8C9WQY2yMUS2JFubOJObpHFtbU3OPT5o60lMu+R6337f7+98uIeEEIKPeAbZt9tiiP/wmhb5XNZhBU3Hx6ApZHY+cERa52YqCAII/EztgoyxhizNrpOzZrTkfUsC52yjr0hqV5REPylBeeC3gYGjv9tGTWFunSLTZG6mgkCDeh8AbKGnGdNSNLVWztpEW94HNWwbHbfGe2M03iZnfuF/3M9OP7ON5pTcpgIK8zMFhSrU0fdzjQ9j3xkJmiy5ervVnvMUtbBtNI/8vjGMqXIWgC9yaPhUzDaaJuYGi4j5WYECN1fvyDs1ocPswMa/6dhqOQtaK0x1iT8sZzWhz5H+Ko2UU868whcZHDySsIVe6ulRTGKuE+R9psABjS+7Xb5bNfqoW98RpbFuOeu0gi/c9aVXrwnNkOyOl+SlImc69MjAwNEX5buO/qHeAwUyq5UXar37TH//sTQAnOzrc43SJ5/LfR3q0FRUb1V6AUeWZjZcd9zsKQmFgs2FL2cAHAaA9NLJPX8pUUPe6eDBZCttOVsJpc3cG/IL/39yWCQcEyK/fv7qyGyewUzJQQ88kf2MZSuiQ4fPjBq842F5kSf5VYyxxpOMeZ8rqc/krh51ULl6vRIIvPugvES/7BKNllzEaXzFa5jbkxjfFyfxgNwZ3PhHn1XPLYoaCf5Tl9X1h1xMkimaQ25LBpmNHMWSQ27hfnzwxIn8oujX4XDBL3w3aNk3bBrTXySVxBo5a0ADNOK+thA4jwKAXmg6bljGv3L5VHn26ThJLpczgxvxoPCdrwodPBJKtFotd+VygkwQAVFywAM18g1jk1WhABCA70cvvFMLLTvhFMuhXV0M/ABlLHTN4MFHCy13ciPaPOG8UBMKADrXf3XCKSota0KL7A+FXtWMtufqv1/JO5+W5y64LA9xX/k/sCK6d2Rk1iv8t0lZ1cmNPwMmvWgLBYAmRT9uiI6SnzRVNEX2jozMVoNW/Nc3fOhUrJftvueijWvfLjmoB55fqgEB4A0kVBrydGAbIQAAAABJRU5ErkJggg==") +const [IMAGE_MOVE_BUTTON,ID_MOVE_BUTTON] = addImage("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAADpAAAA6QFUkhRLAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA9VJREFUWIXtV1toXEUY/mbOye7Mf/berMZIGkxtSsWKNY0ltSWKl4iYh7ZQCgGLFCmSFxGkDxGkYgUrCBW1qNQnQbF46Wq0FiKBgLWNISnEXgJqTDSxqdk0u+nZs3vO7PiSxO2aPOxum6d8MC//zHeZ4fxzGAMVgIg6OeezSqnpSnTKgpRyLRGliej0ipsDABEliEgTkZZS7l1Rcynl3gXz+TEZiUQi5WgZpRKi0WhYKZUAECwoB5RSluu635Wqx0slZLPZ3QAumLHwoBkLa9q0/hpj7ARjLB4KhWKl6pWNlksnn6zd+Zh776dvDFaiU/IJ3GysBig7QN7zGsAYZ4yvqSQAK5Vwf++Hj3MhG5G63uWM/nWHWR3NG5HAYUNKv64PHxqobbcrDWAIIbY5jtNXPNHUe/yR7N/TX+VGJwIz3X0cngIA8GhQxzuegq+2eogF81sHthxwi7lEtNm27f91DC9a9AARneGcv7RUWm6J9c7IaGC25xz3rs5A3nMXuCXh/jnFJt/+hKlM7u5gU6NeZrOHLcvqDQaDGwqLJgBEIpGI67qHtNadAAwekD3NQ581FC7MX7c3upNTXalTP3GVmkP9my9AOVnwKhPOpT+Q7O7D7Ld9Pn9N9TvNI98cKXa/uG2fzNuZVqXUIBEdsW37dQA507Ksjlwu9xaA2xZTxSI7pt8/cfYGBcOwRGOd1DqPcFsLwAAzHAQYULW2Bmr6GuxffvOnfx5+Lnt5bHdxAHNNOJSzMwAgAbxCRDu11gdMrfUFAGOFAQzhc8WG+plCAWYYnAu/AMDy2SyQB/JpG3nPgxmywEgCWsMXj2kGdgMXAIwf+iUAX0GphnO+buEjNKWUnYyx1wAEAHTbtv10scjmU+99Pv7ysV1520HtwWfApB8GSSS/6IHz+wTCDzcno3sebTm3cddIMZeIEgDaAWit9cemab6YTqf/MefnvUwmc1QIkeCcH8My7WmEAnPx/e366vEEm/roJJTtQOc8mLEQdM5FoGUTkYiOLcWdx3mt9fOZTObM4skutWq5lmm6/HW1Hp/oV7Nzt1/54EvhzaSYVh7CrVvmwm0tVVyIgwOtzx5dSlMIscNxnB8BqMJ6yRfRfee/t6pcbnL3yul0//CDouFO5a+Lb/cC/OLAuj2zpeqVjdXf8WqAm4WSu4CI9jPG2qpq4jXac7cbocCc8+v4WQCOEKIjmUymbkHO/yClrJt/Eemi0VWOXsnvAs/zUj6fzwXwREF52LbtfSi6ZG4lTCIamt+5klI+tFLGi5BSbiUiRUTvrrj5Aojo1Wg0Gq5E41+gImj+YjLC1wAAAABJRU5ErkJggg==") function addImage(base64){ var newImage = new Image() diff --git a/move.png b/move.png new file mode 100644 index 0000000000000000000000000000000000000000..a92b267a57f4823f9eccfb4d024deb9e6c1d3305 GIT binary patch literal 1096 zcmV-O1h@N%P)8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H11Jy}H zK~z|U?N?i9TtyiEX3oj(%zyUYtj0(hOl?ZViZzWTwIzy|h?s}APznKy6e*Gy5u^_h zq+$gt2o<%c)F(l)can0xQ1ZwywVQ}PMiY^(+-J3!v^8o(H5jIXIA04tSn zfA5Enb0Hg%y58lC{&k009nBk&z+pp5zpf7-8mMizD-B=>A+|Y=(^ovv)O-Aq?BCO0 z$-=u)|~(h9*{lFL!UJiF3exIH@cHkU8z$)ag~}w{hKd9Ia%;36V9bSknHZm?6-YB ze@*o}%_H9&DR#fOZJ*5BnO3FLAQ2t0ZTocqIn%PNj$AJH7J%CpQ^g`Xrr$qt_67yR zutZ~>)H;uFTMNJdGaLjMP_?!OYWf=NUw-qae;$4=dwFbkaR75oIFz$903ZRpLPR^Y z)(1?j^#uT9g#irVbH#@GnL+_(7@P~g0KoFuERYBCX&ZUZgBh~GNCH~J7msNMb^{jx zj34?X0AE3=hI77d;UhGql%0&R*8l_nblbN5bg{_hQ}2B~{_?S1dD}tl!Dqmv9|lPz zzvzMU`vk%dHz%We9&I_dao0#OmxvMo+5u>-^~a`ZzL-v@|1sz1y-X%^R0xsaoFBt7 z?P-JpbMgJ{`s(onoBHS^l}sU-{rm;mxF&RvyBwTjs)TEmd5Ig9EM49$iXP2(iO)oF4(G!g|RU z(S7H?x2jxja`(#VbpP;!qTx>EuZwT@0{r5@x;?X{>XnVv-|=dIn}w3QfQa@p#@ecC z;x*cHw;Q3rob&7WSpbd@q9d71rfxyb{~)ETn|~4MqR~~3UditQ&+}3~pU(yGL_vAj zw(Wf=x@2x8Od=YZ-?@@fKD1KCi;z-oB_c&c@2