From 0403cdef8c643102c54d34708db306517565ed67 Mon Sep 17 00:00:00 2001 From: Dominic DiTaranto Date: Mon, 29 Dec 2025 18:29:41 -0500 Subject: [PATCH] onscreen controller --- assets/css/style.css | 59 +++++++++++++++++++++++++ assets/docs/resume.pdf | Bin 0 -> 12618 bytes assets/img/sprites/controls.png | Bin 0 -> 2940 bytes assets/img/sprites/sprite-map-1.ase | Bin 5338 -> 21098 bytes assets/js/app.js | 19 ++++++++ assets/js/dialog.js | 13 +++++- assets/js/indicator.js | 1 - assets/js/keystroke.js | 64 ++++++++++++++------------- assets/js/terminal.js | 3 +- index.html | 66 ++++++++++++++++++++++++++-- 10 files changed, 187 insertions(+), 38 deletions(-) create mode 100644 assets/docs/resume.pdf create mode 100644 assets/img/sprites/controls.png diff --git a/assets/css/style.css b/assets/css/style.css index f67c98c..9a81e6b 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -281,3 +281,62 @@ tr:nth-child(even) { top: 570px; left: 60px; } + +.download-resume { + font-family: monospace; + margin: 10px; + position: absolute; + bottom: 0px; + right: 15px; +} + +.download-resume button { + font-size: 15px; + font-family: monospace; + border-radius: 0%; + border-top: white; + border-left: white; + margin-right: 3px; +} + +.nav-bar { + margin-top: 5px; +} + +.nav-bar button { + background-color: #ededed; + font-size: 16.9px; + font-family: monospace; + border-width: 3px; + border-radius: 0%; + border-top: white; + border-left: white; + margin-right: 2px; +} + +.nav-bar button:hover { + background-color: #c3f6c3; + cursor: pointer; +} + +.controls { + display: none; + opacity: 65%; + position: absolute; + bottom: 0px; + left: 0px +} + +#on-screen-controller-button { + background-color: #ededed; + font-size: 16.9px; + font-family: monospace; + border-width: 3px; + border-radius: 0%; + border-top: white; + border-left: white; + margin-right: 2px; + position: absolute; + top: -35px; + right: 0px; +} diff --git a/assets/docs/resume.pdf b/assets/docs/resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..845b0cbc504a6de63084535ecffc395e5916769d GIT binary patch literal 12618 zcmeI2c{G&$`}kADGnA4N!lY6Xv(FeigDhERvTu_aV;F{+u?&(DvX)8;rIZ%YW=~Q? z${LkrtR;I0Axr)4Q9V!f`Fwxh&-Xd!Ip=%6r#a_#zwhgPUDx}1U)Octf4tsynCt2* z!jv$e9Tit99#j-mq=VpKD42f01Ei(~*+=%Ku-w52Kw=5er_xwt21K7mWRZ2ru5=Pv zLj%NQF~~$OP+*!~!edZ5be-<_rx)-Q;Z*Iurggw!G`?JvtlC>84sRgpy5kaWT zjW70>`K+whzftHpHPF$u7@c=vdL&#ugvV(KHU}bmlfDHGjJSIRakt1Fz%WSe?6M5= zFNsk8FB0)BQ82JF2C4jGR^HnN`#4y$ztooojE@bM2Gw{P2l(YHP-e%BCXMdV1cOTz zYz43hiw3Qg{ts>zrdw`r^R+aP66iUm1;^_kG9&y`prY*zDxX=0 zz2SxPy6E8#3b9qqIUbS|ns2;J>P(zN`c0o=W%J{%XVB)$H{fH_Kfl)8z$X#C*ig4` zlU(F*{3>0JQ)FD1__~L?MI`#agt0lbm6bQ+=fwin@xd}53g*6zNM4E9e|DDG6>`_d zZ%pf5GH<_aZM<#i|4XRla>MjQ#{Cu+M9%KGXOT$b`d9&g9=Zdm?iB36|PR^w{dAGWpUfl@0mU=(w zppB$MX(@~XYNqYZX{P6NS#8W*A3TzTq17^mhgMwJQF4>ap#qE9JBzKSEjcixh? zSIb*1Dt84P7Isl`q*frgt4eLTwn9fL6A|!I|^$qE}FJkjchFEYwfFx zbIWYmXPkacpZCrVndJNLy#ve7?h1O^v>I}+SbOim&!;~x_7qL);%sU+8&`?c@AeNW zpJ;qR3q{%}pQ%YHHm^T%t0tL#?<|Eu%HG#n$Z(UO~vfDDbU6|uQ8B%BCm}&9V;8H zkdu)i^gOy;%fZUl1tnyAj?FK)LhC4LV?zSbiu_bzh4%geywIG>mYp?Pa`Zj#)`*93 z-rQ@Kz$PksY*+78~qlpYm$+nVKG{iFc3h4q>(xci(u)&|bI6s6TEk-c#A zjsd~7+*#akAvt25f8Ow(-5D+CtDk!yyo8>Et~eJ*pEj2K)a^+V6}>27bgg;xuw8bv z&fV8yr(|OI?0atowc3cq)~vp{E0A`yj7_^2v->zFJEO|Aad%K)hxbN5=>Qu&$niR> z7f)Sd_fJo4&aFj#F;*8gOV!tjX?9TbrFz+AJ3EKe+Q!lC;<6$2sGKA zQuwy|x|s-W>qRer*(YJTk%zW4!c~DK?MdtYXJI9}%2QGeKY|;AEwH!YG{^z7%;-oA^iAR_P%_pT`ZHI$Kb>xM_XQQv$4kC*0e$h<;+n0GNKB)v9Jb^Iv z*Nc_5z?{{?lN3&+b}%(Bc-IWxMU5XuMo}hmC>gZz8-mR@J_n4dvR%sBtVcKb(L5oG zJgdfXG-EOw#ga>Mba96qW|ojv+h>$pXTiDz8MH{%x1brNK8j=6h^tnjmGu`*;G}t42=*MQ7`tO)~#5`8E~Opj2I_Hb z6aC{#rt8L&-h1cmGySwG75OYXLZQLgXAI3&d?G)6oHzKx30gI2Z+Hpr0^e@IKUx4%o z+O@;ZZ+NNuX}dW)VG(C_mp7oU{md7#k?@i;8OC{XFuPm#X8UQ#rL>y^>m(++T2rjM z651ZxRI`@e*yWBLAr@V%mk$n+)Q)J`PJ(1DO3hw6u9bE@C$Z$PusuUKlD{oB+^5i2 zKx{mvFu^9RaZ>wHR5m#Sx8m}OBabaSZCg*fu0X$2o)Y3obCF&xj1Ugrdp7E^YL4V! zg!sihC+=9(-`~2Wy(DZ)yJ7!^I8#`9yeT3*UYe{SdA=9H&odb!7rrw6nM+&)30kj4 z=RXTLIaOQX62soSj}x?JMO|wUOvQ7gaxg7N?DABBQ=AeYxbF@KP67hkxuQerVa%C* zS69d|d$b?1{qL(AyB36%ynbiP0#7*kEhu{xdfO!pI9?_$IM`?VCJ0AwvhOZ^f zi~#d$BU)}Y3@{?3+D<9Itj$QhC|iCQ9E!ZOroRa`lzQ5OGx#dMMkN6Sxz@e zdLU|&zwJVn&M;D5XV>_4z4a6%_`|wH>sfaf{3_|vt!IReuIx1jPhX##dv2UTc~|p1 zN43xXDycW7+FuK87@VMC)>E3Qz`CP(WHBO@;PX=aP-xJ0Z9#&4w(}}iz zkvG+z=rYVB64MRoZ#nmD+?NurrQC*{)2SG`F_C?r>U=NN&H-`MNE`YE&i; z9WtSO-J~r%N?Q6D+U8AnPSv2NdWBV6_xlcUMf&l@W@o!K7QSQEi7yT(mFch19W7hk zQ4X1aw3YGU|FDeMdwr^}IXYwtYB0;5rg~L`LO@mNkoBQo*k9HU1h{53x4kQ_;;>{K z7j7(AE={Cdjb>Y-j`xpF4{MC0bnC}6KZYANJ2;nrci(Xo_N*)2!gUnYn9aUzS=_4oK4rlN~?amNI$KP^sgn zP*`HsH3+KIczURK*r8PM;k5?|wXMm++v>Kdr4+5MQ`cd~s7dE*WvR@9r!OB_yC8je z+mTxHsf4SMmStm?jv55kjJU4JNxU%DMan&yS0Q%zz}Z>3fLGh<nVQ@cM z!;981@=?1P{h5IA4k=Gs@bqKEfX$cZuQ<ziihPhDBq&SB#q~ixp&g9FR5ksxnfceVZo^@o4Oa zPhAOI{l{jnVH@`3`HD84594!rthRxnn1(R+L7Dk=FV&SE@WS(N6 ziMM-$_gi`p%FD?R?QCa|;Px8r06K@l_QA;(g+@lkV1ds3x1m{ap>yjOMG(&@Kv*sp1taw0z6dNw9Z52t;RgmS$6$t0~h$FIsEOJwh( z1iMqXeueIbuh#9f0vGM@;O8qA9iD&N?~`wLWccVF%-l7IO z_PzI?5lFwjsn25Vspcrk31j!iMfejW%A%9r{)U^?GMD-6Q#ivqJh`hwJJ*lg!(WlJ z#h0CdPLP9xt79`r-EtPU-w!@TsrnNRy{*O=+xwrs9di4UbF=@g#a(aAFvt+*p;zei zLXCA^V}yiG_T5YkiTBg{lk3lWWe>%~G!A5M^YR*6J2NHy^6iRwLxqo-K?Q;)>!S=U zQ2P&yS)}n@R~sN)rR2a1QLlM-KYy{oUhn4E%f8YQen}!`onx9*nTGP>V%v>q$KLrX zA6w70-stUpYx1z^$+?sG+qF)C?^s#Q$MQx!zkEFY?t*$6?c+-V+Ar0UJs~qeJqf=d zN+lTC4Nbp(Xc1|oyHgWyajUg-Gtt13VNK}>x~ML)mgA(CrZ7JC)IY7av!p%R{*pSl z_~X!aC}sm}@X8Sr+fOQ0N!|Qp#bj95{Yv&>qa2)(>*83zd5QPo>4%Kj;k)GxJ`h+H zh3*}LuTtK2XeC{Yyr1O)7MQh)d0x`txp1%Z#vV@Pf!+>gc({xP=F_F#-T}D*(+g?m zRS(|pdwI=`;;g}*OloVhHvJend>Qg^aWYnB=`?4j29NXWM*sU7vf#g9kwYN4tdgfuNw<_WKTHhg5 zXKqwpcc+^F!NuGPhyyKf@q@x~N=w>OWrM?FK5g=p%)t-VV<8!+Sxh$?dy~X=Wz@d$GQT#t zF^iyyTYssy8n3j3>XC21jOIC%I)D21-7;TPh~0E_@{?2}i3WPs{S@m=tDEW>OVKx( ze10YOcTI~doz)PU%-u+?_H)X)O23E|tP@@=$xe&sdv&1Sg-^u0*d|kB-d@b}rCgT7 z=%o!AoJy79nftM&NU+A+12TG*WyP&#s!94{$>w&3#YLxQ6vq90#Xl-w937PGl4MGX zjs)eq@mH+CsrDYw4$jvTn@Vo%zA9ALv_<`J8rHZOiHjvQDh)pg7Hj;&Tn;A9(<0lo zI{parO#NXM?8n`9YAS3Df-u65Y7~Wz1MzkwA zY?D@r7T?9(vrq4ON>lbVv3q>2%LD`K56nE0JD3n2)pB)kb0gA}C_mMx!J}~hdeqE| zb?Qec0`6YjRk!9G7sht96~zv$4<_??W|!Q3x2K{Y6cm!|g+&yo#}-g-h3z~%Y5?Yl zNd=UjC_t(ToCJAivAel zd+(j^f?=2^?n`|3xhk43eumXSnXN1_?LKj5MLT)0{H`i-Z`46{b)8Ov$^w18CCGpE zEjH)b14AFhB7djV7w%jpw|-Kmj!Q>gTSMZc)s@&z_9}|(F(0enR=+k>G8M@Q8q*)W z-E;7DeH;u^b-cu{pH#J#&~G6LDaTaVXEAszu?_vB?Z&Nk4v(t+)Z#xzfqN$!iblZh zu?1eqqf@r3^#kInR|oEDjJ4+t&NJLg+t*b0#r4@?9_@c*OB2IyYAjBZ>`S&_&IZLl zFgoPF$6oZ!HmrP_=B4_L&r(g3K9?_S8k~L+E;@^UdG)2!tmDVJxvJB9r*RKU=aq8m zMj*b)PK~#RnDg7uHzf?p=U7LxM>DggA2+=wFg@(EKDc$(J*taIC1aN4k;9gI(8NSb zIy>-#VD_xmT@we*l%yLYwinEVL<1%l_sd{;C93&i-|w5x5Z08-fBEsl22a67qgP5p zX2S#1el%U6_7OweZ6JGp|euPuf!z`Pl6YLHSraD}>3Q?7ocv&d7`bdmH`nCOy6 zUT@%Q52eD@w)HJ;5bjUS*GQQYhn+eRNtjr0)=%w;8Ii2Dk3REnS_cOEE4zQT2?XzV zfW_?@0>h8IEY%@0$=n+K|GI_BV6t%TLZGztwy!x3N< z5(&n@Fkmb~84O1Qawu|Hj)9`UXc#aDbQuN-^a30McKq5Le|0XH+t`*M2!X!eo62R= zKr{VI&-_5P^)Ejz6{HFS#-& zQpgZs83|KT zR>oq`2n+^`f-5^h2*d+S2%h_DF#KFuUwt#V8N~rn0_!lr%Ypv*ejtB|%7n}!l87wg zpH;Lm+4r6ABe59NU({MnGth_V>PcpS50EKTZ*|%6k}_E^m833fjWU6n_~6LyRD&P} z86RXya1HWw#gb$-H9%^CDuG@;Ucf5gKrfm%QzcMcmI!ckvI;QfiXpNZAg~&PjXR&-#AdrB70Hpwg5}iSTz_3^>1PX`1;fjEUB9raSA_gjYGq-VFeD(3Y z@>IGvnCp{xfbPdqmzDkI*yjhw-b|(CK$KkRUJzgc0#iaP2LreQ9#w$qlKfoB42^x% z0}Qg6n;X@Y42GkWl$DT5aPTf0WwbLIDG!E#f1JnBy}bOqsVue{*X3V6fcU<7)z!Bm zGnhbp8o=?&H?6;9+ZFT%zk>3^hhcfWH zwf>>R{%yCvEAqEf_YWEVuE;->*uU-ecSZho>i!|a-xc|X68pE^{;tU1PTfCb_`4$i zP-6eK+y6Ti`3tQ999vyBfD6w44Sq%a!tTCeKRp`R3xWq2AkmvdWRO4*b1)b30npQ& z0_Fl+V5AKO(4`pwTG;>&gP7BZu4FHO4?=WkbXQL=X)#^8s~^_^ zcQF_@te;jhwqF*3e|EU6$31ueLRrSdUp*2SWU?il&ULlSM!C;m*f&5*r;$yFK7hgZ z-9gO1MZ3JkUsvE-eOtlQ&x>gff`aYAUt@6uIsSk_e^6Wwh0A7{Ajq#k7Dx+~#I*mK zMJ`;%(fzpi_Xke^nErFkWmh-=rqbvXU^jrvub`K^H3}J^TV%+7CfUr7MWcFim-{&Z ze*?!5p(rj(hC_kV7T}Hq?kMiF2A54| zzy-(w6(|DugW!(!fV=XyJK%o#8JOeh0LL&;6mW6p5r7{Q;E#JpaP<07?3=0AR`t}3PBv1$x*bV$m1|WK%ySP8F_jef-3Iom@ev!e^K#hKq!C-JS(1pLq zU?`xSevu)Sf0c2Q`Kv!D3aShoBK%|vMFA&g{~|;D8yOn)uX@U8ppAaR83sclf6WyPhC=`94+g_Pf5;z;K?Dx^7~F3Lo*D#v7_boT#{#_k+5sOO z?yCWYE&u;L@SqF4?rPe)7$^pf(!s%DI@&n6vOZiF3B%~35c=9!BoYP%!0&&n!hP3) zZye5@?CQz%^8!OqaD)y@ABNM#;LupKzK%8)jesGvwNXGRly!Ab+^-UoMP#s++Xe;) O+8VTDhn|@}=>GwuT;o3g literal 0 HcmV?d00001 diff --git a/assets/img/sprites/controls.png b/assets/img/sprites/controls.png new file mode 100644 index 0000000000000000000000000000000000000000..58ef5f9e6eca79f354a8a043c1ec659a528fc2b6 GIT binary patch literal 2940 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 QC@<&k?B!Ixe%H~z083VFyZ`_I literal 0 HcmV?d00001 diff --git a/assets/img/sprites/sprite-map-1.ase b/assets/img/sprites/sprite-map-1.ase index bc08ebca90cd8b41898af1da5bbb0cda75e1ebc5..337d2f119960da6032f8c115e727e4916cc245b9 100644 GIT binary patch literal 21098 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 delta 4860 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 this.dialogOrder.length - 1) { this.dialogElem.style.display = 'none' dialogMode = false @@ -51,6 +53,13 @@ class Dialog { var self = this document.addEventListener('keydown', this.dialogListener) + + if (controlsMode) { + console.log('hello') + document.addEventListener('click', this.dialogListener) + document.addEventListener('touchend', this.dialogListener) + } + document.self = self } diff --git a/assets/js/indicator.js b/assets/js/indicator.js index 03f6a55..24bc315 100644 --- a/assets/js/indicator.js +++ b/assets/js/indicator.js @@ -22,7 +22,6 @@ class Indicator { } show(indicatorName) { - console.log(indicatorName) this.indicatorMap[indicatorName].style.display = 'block' } diff --git a/assets/js/keystroke.js b/assets/js/keystroke.js index d3810de..39fe698 100644 --- a/assets/js/keystroke.js +++ b/assets/js/keystroke.js @@ -8,45 +8,49 @@ function getKeystroke() { event.preventDefault(); } - if (['h', 'a' 'ArrowLeft'].includes(event.key)) { + if (['h', 'a', 'ArrowLeft'].includes(event.key)) { player.move('left') - } else if (['j', 's' 'ArrowDown'].includes(event.key)) { + } else if (['j', 's', 'ArrowDown'].includes(event.key)) { player.move('down') - } else if (['k', 'w' 'ArrowUp'].includes(event.key)) { + } else if (['k', 'w', 'ArrowUp'].includes(event.key)) { player.move('up') - } else if (['l', 'd' 'ArrowRight'].includes(event.key)) { + } else if (['l', 'd', 'ArrowRight'].includes(event.key)) { player.move('right') } else if ( event.key === "Enter" && !terminal.active ) { - var playerPosition = [player.canvasX, player.canvasY] - if (player.direction === 'up') { - if (computerInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { - terminal.show(); - } - if (gamesInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { - games.show(); - } - if (portfolioInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { - portfolio.show(); - } - } - - if (player.direction === 'down' || player.direction === 'left') { - if (musicInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { - music.show(); - } - } - - if (player.direction === 'down' || player.direction === 'up') { - if (resumeInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { - indicator.hide('resume'); - indicator.resumeIndicatorShown = true; - resume.show() - } - } + onEnter(); } }; document.addEventListener("keydown", _listener); } + +function onEnter() { + var playerPosition = [player.canvasX, player.canvasY] + if (player.direction === 'up') { + if (computerInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { + terminal.show(); + } + if (gamesInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { + games.show(); + } + if (portfolioInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { + portfolio.show(); + } + } + + if (player.direction === 'down' || player.direction === 'left') { + if (musicInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { + music.show(); + } + } + + if (player.direction === 'down' || player.direction === 'up') { + if (resumeInteractionZones.some(a => playerPosition.every((v, i) => v === a[i]))) { + indicator.hide('resume'); + indicator.resumeIndicatorShown = true; + resume.show() + } + } +} diff --git a/assets/js/terminal.js b/assets/js/terminal.js index ddcbe02..f6d5601 100644 --- a/assets/js/terminal.js +++ b/assets/js/terminal.js @@ -29,7 +29,7 @@ class Terminal { this.terminalElem.style.display = "none" this.terminalContainerElem.style.display = "none" terminalMode = false; - this.handleDialog) + this.handleDialog() } handleDialog() { @@ -151,7 +151,6 @@ class Terminal { getKeystroke() { var self = this _listener = function (event) { - console.log(event.code) if ( ["ArrowUp", "ArrowDown", "ControlLeft"].indexOf(event.code,) > -1 ) { diff --git a/index.html b/index.html index e3689fa..24c68fe 100644 --- a/index.html +++ b/index.html @@ -29,8 +29,10 @@ Software Developer & Architect
+ + @@ -39,9 +41,51 @@
-
PRESS ENTER
+
PRESS ENTER
+
+ +
+ + + + + + + + + + + + + +
@@ -72,7 +116,11 @@
- Resume placeholder + + + +

Unable to display PDF file. Download instead.

+
@@ -239,8 +287,20 @@
+ + +
+ +
- +