From ffd9ed775c24333a60a98bb1c4161933dbe3f0b4 Mon Sep 17 00:00:00 2001 From: Sebastian Cabrera Date: Wed, 28 Aug 2019 12:44:45 -0400 Subject: [PATCH] Implemented input handling --- README.md | 1 + pixels/bin/bz/bronze/pixels/Gameloop.class | Bin 2012 -> 2545 bytes pixels/bin/bz/bronze/pixels/Input.class | Bin 0 -> 3536 bytes pixels/bin/bz/bronze/pixels/Renderer.class | Bin 920 -> 1043 bytes pixels/bin/bz/bronze/pixels/Window.class | Bin 2167 -> 2167 bytes pixels/src/bz/bronze/pixels/Gameloop.java | 19 +++- pixels/src/bz/bronze/pixels/Input.java | 125 +++++++++++++++++++++ pixels/src/bz/bronze/pixels/Renderer.java | 8 +- pixels/src/bz/bronze/pixels/Window.java | 2 +- 9 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 pixels/bin/bz/bronze/pixels/Input.class create mode 100644 pixels/src/bz/bronze/pixels/Input.java diff --git a/README.md b/README.md index d72cd84..a52213c 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # pixels +x, y - 2D Game engine in the works... \ No newline at end of file diff --git a/pixels/bin/bz/bronze/pixels/Gameloop.class b/pixels/bin/bz/bronze/pixels/Gameloop.class index 0710e713c449c936549548f2be004b9ddb1f5dcc..1d2cb5bc2e343d69bb3eb22a80fd9a5239ee46fb 100644 GIT binary patch literal 2545 zcmaJ?TWl0%6#oA1c6U0=wsh&0A{H#AT`mQI%C;5cR%mSj+gd1Ir@Pa3U^_F;&O$-F zqbOccl$)=n&k(van)qsBf^Q~1nE1+rZyJq?;`h(C-ECTJ(wQ^oKmT`b-#Pp3KVNNYg=cG7RQ`0Qt6ic`nZv@Z6}PNz|!OTNxdbdTca(9hL0NwFN}~t zG_UQ;Se8DVG6X{2m}}@sp7!LA2Yg+-fZ`ff(r^t|psr_u&%T*M8Wx+Dlko&<7Fu=5 z6PkowIyJ3P0dY(qFmSk^(q4hc9@|QLy5$Y(sf-cYd9mF8s^^BS4!iHeQbEE9ZKpt`A`WwRY^ZyuEHwrU7Nk=CsmSyRm_vHYx3+Or)M zZRiMtITR43|8&|j#x*<&mQ=BH%N{VtNf1`IJGAT09fR~E=5G4U6D8M--5E1QmMCC1 zi`mzW)Jyv0+VJ%>_BlLvL5m%V_G)`rwD; z)x!cC76bnuh(3XmUOSUE>W{Y7m$2dk8lD8{6B?J=qoib)0={OfhH_TNG(45J8dC5K zYt)}`?Nlmf@SKL{eS@^Gl-UhyNPtNxo}EiXprUDEdhN1ZBN{4DS%NVf55r`M7f|Gg zX(jDb8cra^U{Cp91oTs#Xh~Bs+S1+Watjb}43-8Pm28J+dMS>@3rL5-DK2cdKS&xp zWH@UlQDG}Dfqmdh`<-q`IC(@is0Nq8lt z&x)#}r_)9<@81T_l` zcE(K@ou*vOk=a$VQ6`L4Od!DjVuVm6XPeVlBv*?6=DzUXTz7m&<+7t~xvz`Tj^v_T zOdVGvpEdm2@8bdGvD>JP1*T9Jt3Y%L58UvtJ;-MiLH}BiZc4b6mJ*_#8jTRV$e>p9 zE%4ABXp%SNSuFMy8isD8aSCfGHd9$y<-JuA9rUq;$W>TI z>Kd10AJZ(}-WF zz)m|JERBas<4S2<4YX>3*2pC820CU>yP9f(qw!EvJXoXDgc5P3MwKsh5?5*zR&X?~ z1Us1MuA%6j+t^nb$>Kn?CyRs8C-`92>u;fdPIqKZH#DbvdQSH&by?_BFm7U0Lf*vq zG#tYEhy*ieON%T{O5`kFtWnD@Uq^(oS8A;h#_tDp`Sbfm-Bm23(b_Ctp2lnEG%<;C zbsDcvLTxLpEzROBp4MHvUmeTh-5adZJu*4K!3#i=;TjtGT)`%-B>(D3h*f@*s@VQo ztl>!`?bfnw&HRc{T8~ZGfL6|QoYG_1OwMiL-rkBnY{LMy;|rdAgLZt!pPlcq13zFV zex&73w7ZMF_!;}~3l88nbm0%)yoVmLt5+1`py2PNC`Z4jBvL&i8bQt#{VZip`BU7 CbtaPl literal 2012 zcmZuxT~iZR7=8{3*|6P&ZwLZ{3N=J)v{u>(eu7XCl>%bXYP(5}xEgl1n@ww(Ue=5D zsKF7p_LeOKN z2D*mVx74;=CLO&iypz<`FRvVOzBAvBUYi$>~2-*I&u!BGuw zZizqrS<#mZ2HwIkw!$`TXU1A!&sehY$eCBKBqxHnjv!;;I7lkwlzf5aG6u^@PkNT^ zPy1}}!hnVo#8>GtkJ+!YC9A*&M{$ZJVb_j#>lnltMdvIdZKhLpAQ@#bY~UP5*hbTJ zIRye8$+5mo+_yv@P#*6Z7{fSu_)b|V(3ITnLfZ*k)NnzdF#x-jhJi~8nC2>G1zR=f zJp)s!n$@|2G(8$pBlKL%p)Z?Z~C0MUd$P|ifd{n3R1f4NOD}U zyp9hw+z{AZDcYFrOV2C0zRaJyo0G0@Ikth1RJ_^%(zI{p?#y^*j)4WT269TL<*lOY z6xF(w7fPV!rsWm=azCR5b6wP3vsje*@_B8^c0DI2D<@IkV)$SPs+CyemW{FRzN;k0 z@7~mdoxpNPVgberrn|N-`m|H>a&p8{*FkK3MGh&_*h3N_{;Cm1l^S0TT$Ngd;LY{q zyFo1{ZEAzFI@QG^aw#XiYVtZW(P)0`vADK$y=EQ$!iM26dD> zcw#UF9np#1d<%4K1iegKrRz$)MEBft>|Mq_ioJ78vVR$=)bB{G;NbsLs0$^IRwCWa zB$X6h8!6HoDGmfFnYI!n669>!u_VarfN%W%+863cA9OMKX!Z^}g(j(l>qqxTV>;{e@ODjpM&#Ax1 z3*t+hz}Gm1Z|U_t&Jf8Eu?*v9-ZV>${~Mz`#rdH8H-ia$wpM-(zak%uOAUTu%s6MX zkt}Xf3KQ#N%u|XG@gv-#6lIJDuqf$7{~d1Q4!!r{J_?j#%vg;D*wi~@-wAD%)M_*c r5mFz)(d*gO(lMgpx|#{Dc)9l^tmbrwp}7>GE)R5NXk40B;p6`Rl{J%2 diff --git a/pixels/bin/bz/bronze/pixels/Input.class b/pixels/bin/bz/bronze/pixels/Input.class new file mode 100644 index 0000000000000000000000000000000000000000..98a8b7259b02a5b3cefd27f34f37585b875d7761 GIT binary patch literal 3536 zcmbVMT~`xV6y28uLy`d%6-5*=MTOWBKdM%+SV8=#0WAa+KRZdLFcOk9nSf}&Yun$T zZ>~P{#h1E@U8}3hAJG5O)j!ZxyYIb|NeD@C^~c0=asu!RY`JePnX!zSor_&f-nUZR-6XJE?V8I@%v!Rt zPV9=c61R(vm9+{1vFujza_eq07LyV67j5o4{(kR#GlucpJJ^0eT{<)FlyjD#@L-@fVJHraHu}aS~nN$ zqJc|bZ|o?8)wIyT`dDkc2t|qFcGj9GEheo(!c1l?f%bSVWoBl~f-S$@O}{g5vx9cU z*VRRh))0H9luw%u{}(n}cFHkR3*%PQgC)s-{pQbY=8|bdy1Ain9d6Xm32P1 zoMn0K;)rTm!s?zC2$lDwvr+!g{+m@RtK`OWOIDg)`5*a@$q`pN-od>9?h15!eWI(c z%BSFzuYr$Yvhs75qc$gVjwuIQ%?FDhm`G1;2i0IuAw#h|Uohw9B*pIf6f5lJUb2OYFWR<|nZma&|HX7SSfqTx10~v2(~7$d_F>;azoE>X4LJ5p)&QY)3P8YC*Eq zpVtajv1p|w@{)mNi5z6`aYVo=S56bp z<;puyt-JxbZsQJbS-$u3>lObKTyIBzMR#&YuH%Wv zLUb{+XRrS(A4TO+pL^8u?Db!gsZTMDpoMmX_2@+i2dHf?deBF!A4j>K#$m;#hyIM{ zvI&s)RaKP;Gtt&Ho(JLo8zIpamIeC=lYC3@he%fv4rqqYX=DXgbwZEMxZmM zR0Kg)%0N>tP=^M3iZ&X(UB{oG+5g-padlQ2_gEEfhlktY;!3_gi0z~>-6+75a)76G z1Dt%*05e{IYAINeS}6vr5Cb0N0Is`I-0*;^r67=&BHBob;VRr}DKu`C6tj&2Xek(= zz7!*G8sH`yTzADex0u1`;g`70*{aM>NcF-+_U5H3+@L2&5J{v6BanvW!cDW9vdKCn z+$S%vkdcE+JFD%13VfSt<~T=eoI^NK6{6D%(a8{>st|?$A7YXrrWhizL5QLk;)I$F z&U=NeZsyr42;s359!tlA7DH2A3ozXZt1=gd`^Aq)yIf Sa$sbdyn*QzD+2=)gEas`iV;iz diff --git a/pixels/bin/bz/bronze/pixels/Window.class b/pixels/bin/bz/bronze/pixels/Window.class index e30dc398c2b01138a7e5142861c0b1199c3fb4bc..4d5dee5ebdeb06ad8a90c261d889b09cf6291ea6 100644 GIT binary patch delta 14 Wcmew^@LgcTd`3p2%?lW>vjG4w3vjG4w1_i= TPS) { unprocessedTime -= TPS; - render = true; + //TODO: Gameloop + metrics = "TPS: " + tps + " | " + "Mouse X: " + input.mouseX + " | " + "Mouse Y: " + input.mouseY + " | " + "Scroll: " + input.scroll; + Window.window.setTitle(Window.title + " | " + metrics); + + input.update(); + if (tickTime >= 1.0) { tickTime = 0; tps = ticks; ticks = 0; } - - System.out.println("TPS: " + tps); } if (render) { - renderer.clear(); + renderer.test(); + //renderer.clear(); Window.update(); ticks++; diff --git a/pixels/src/bz/bronze/pixels/Input.java b/pixels/src/bz/bronze/pixels/Input.java new file mode 100644 index 0000000..438bbc2 --- /dev/null +++ b/pixels/src/bz/bronze/pixels/Input.java @@ -0,0 +1,125 @@ +package bz.bronze.pixels; + +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; + +public class Input implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener { + private final int NUM_KEYS = 256; + private boolean[] keys = new boolean[NUM_KEYS]; + private boolean[] keysLast = new boolean[NUM_KEYS]; // Keys on last frame + + private final int NUM_BUTTONS = 5; + private boolean[] buttons = new boolean[NUM_BUTTONS]; + private boolean[] buttonsLast = new boolean[NUM_BUTTONS]; // Buttons on last frame + + public int mouseX, mouseY, scroll; + + public Input() { + mouseX = 0; + mouseY = 0; + scroll = 0; + + Window.viewport.addKeyListener(this); + Window.viewport.addMouseListener(this); + Window.viewport.addMouseMotionListener(this); + Window.viewport.addMouseWheelListener(this); + } + + public void update() { + scroll = 0; + + for (int i = 0; i < NUM_KEYS; i++) { + keysLast[i] = keys[i]; + } + + for (int i = 0; i < NUM_BUTTONS; i++) { + buttonsLast[i] = buttons[i]; + } + } + + public boolean isKey(int keyCode) { + return keys[keyCode]; + } + + public boolean isKeyUp(int keyCode) { + return !keys[keyCode] && keysLast[keyCode]; + } + + public boolean isKeyDown(int keyCode) { + return keys[keyCode] && !keysLast[keyCode]; + } + + public boolean isButton(int button) { + return buttons[button]; + } + + public boolean isButtonUp(int button) { + return !buttons[button] && buttonsLast[button]; + } + + public boolean isButtonDown(int button) { + return buttons[button] && !buttonsLast[button]; + } + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + scroll = e.getWheelRotation(); + } + + @Override + public void mouseDragged(MouseEvent e) { + mouseX = e.getX() / Window.scale; + mouseY = e.getY() / Window.scale; + } + + @Override + public void mouseMoved(MouseEvent e) { + mouseX = e.getX() / Window.scale; + mouseY = e.getY() / Window.scale; + } + + @Override + public void mouseClicked(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + buttons[e.getButton()] = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + buttons[e.getButton()] = false; + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void keyTyped(KeyEvent e) { + + } + + @Override + public void keyPressed(KeyEvent e) { + keys[e.getKeyCode()] = true; + } + + @Override + public void keyReleased(KeyEvent e) { + keys[e.getKeyCode()] = false; + } +} \ No newline at end of file diff --git a/pixels/src/bz/bronze/pixels/Renderer.java b/pixels/src/bz/bronze/pixels/Renderer.java index 7499eb7..84757de 100644 --- a/pixels/src/bz/bronze/pixels/Renderer.java +++ b/pixels/src/bz/bronze/pixels/Renderer.java @@ -12,9 +12,15 @@ public class Renderer { p = ((DataBufferInt)Window.pixels.getRaster().getDataBuffer()).getData(); } - public void clear() { + public void test() { for (int i = 0; i < p.length; i++) { p[i] += i; } } + + public void clear() { + for (int i = 0; i < p.length; i++) { + p[i] = 0; + } + } } \ No newline at end of file diff --git a/pixels/src/bz/bronze/pixels/Window.java b/pixels/src/bz/bronze/pixels/Window.java index b3922dc..95f4ef3 100644 --- a/pixels/src/bz/bronze/pixels/Window.java +++ b/pixels/src/bz/bronze/pixels/Window.java @@ -15,7 +15,7 @@ public class Window { static int width = 800; static int height = 600; static int scale = 1; - static String title = "pixels | v0.01"; + static String title = "pixels | v0.02"; static BufferedImage pixels = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); static Canvas viewport = new Canvas();