From 2105610921952e0cb792263741fd14a6c0de7243 Mon Sep 17 00:00:00 2001 From: Sebastian Cabrera Date: Sat, 21 Mar 2020 11:22:09 -0400 Subject: [PATCH] Added Input & Some render code (but in a broken state) --- bin/bz/bronze/latte/engine/io/Input.class | Bin 292 -> 2137 bytes bin/bz/bronze/latte/engine/io/Window.class | Bin 2338 -> 3538 bytes bin/bz/bronze/latte/main/Game.class | Bin 690 -> 1269 bytes bin/bz/bronze/latte/main/Main.class | Bin 1012 -> 1065 bytes bin/module-info.class | Bin 170 -> 198 bytes src/bz/bronze/latte/engine/io/Input.java | 74 ++++++++++++++++++++- src/bz/bronze/latte/engine/io/Window.java | 26 +++++++- src/bz/bronze/latte/main/Game.java | 11 ++- src/bz/bronze/latte/main/Main.java | 4 +- src/module-info.java | 1 + 10 files changed, 111 insertions(+), 5 deletions(-) diff --git a/bin/bz/bronze/latte/engine/io/Input.class b/bin/bz/bronze/latte/engine/io/Input.class index f895a564c5920bd5e07d6fc163877841f3e6cd9a..a085318254f5df17c0a6266ba2a277d827d12763 100644 GIT binary patch literal 2137 zcma)7ZBr9h6n-vAcawD$2ox(VZ!toGlvVMyU|S7hg8^-!LBO_dl1p4%c00QpGx(c2 z(>BbYQ#$hETRP->6m0ufW&vjmN!#0C} z8{DZ`4mT{3*$#v{I;H*LFYR$k6CB&CfN_Z4TD zj8f0nJ>T`7xPAvnm!SLYII>Z=6%kvg(t%7YRBX$!f-f0j*<6V-%ez&c1jENVK7t}v z=XI!17aR$1IOCR9jnuZL<1uCoKEY7Kz{s7dRhFpmHTt_eZs6@dF zi@H5=YKYWL%cu4(x($b5*+P!!5+gbgLkbMK<%j(U@0E~8M5rqF1JB*pa2sE!xWh2| z|FqFDj}$rB@i^CTSAeLWnFvr9c{F@2)bA15BGe-|lSCd5R1m?(|GPsQmQ!^bI+pN| z2B9H$l=HHN0v@SYW*CU@rlW`zBA%Fx(8Agaw{BPSw(Aqw;@Rcgmay!*15N5Ic7jsk~JR4v}jC;@r!~EPjw`a?6}($r`tL-aXLT< zYN8zB_T(_6v$?1#dw-Y*+s?#1A7iu8*skW#b8x>&ASD${N-B|* zG=);qTuDijB4q;oNRgcZ+TA88zP^6;?9ccC2K!VYhJL5B9(+Q-=cK>%|3m z1H#ce(z5cLbcCJB={NZF2qT*$#}1G_LPjhn4={CvoLF8yz|67jA<6+1O`I(ClDA=u z;S#+F!iOGO#4HTjC2<8;Ti&ivWWt-$#NhDUFSH6HRpjYZ2U@{3%t`e1DD+S_`tp0| z8!hzBcbRUJFY#S$B7KNkO-vnPp^2G8eAUGLxAL{N!;ko>8#{Fp`ydkg9A-Cm<|MWdfsLUoqpP4wa+t_ALQ;I0P|)8& M_;C^md7nY0)W2Q(7#JAL83ZPB*~+llWaed-*fBCNYiNcsGO#%3r=)T*Ff(xSFtARx zVASShDaptzW@J$GnJ6HiXU)jK6`WsMl$`38nUf0Sc;*$9mgr?AmL)PMG5`$$8q5Hs z85vj^*nlKEkf#skGcd4fZD-)v2ozvq-~y5$X$GJMZXn46X0rlmULcQ=fe%PBG4KNb D6Vn-s diff --git a/bin/bz/bronze/latte/engine/io/Window.class b/bin/bz/bronze/latte/engine/io/Window.class index 024ca6e85de4f07b97aa330d369e2953c94180b6..9b497ad1b3865ad755640ae56132d790a8a3c85a 100644 GIT binary patch literal 3538 zcmai033nUS8NFl4mL9cv zxiiMBtD$|_%)9d%w6unfdBZHs%R|?6Eki@kctauUI%csjLaAkCkSZBI%sKjkQPL1} z%>`<7<@DLJ1;;KI^T#QXYC1XE^fanrlUYg^P1n>d^MaA5{3-e@8SZG^NYb`!hi+o2 zR4P70H%U8hgrVVffz9ZayY~s)=I#0gwxC->_c&8OR$j;%&a|HM60v7>YesiW`RpGC z-FcId-!=aKuw&91gU|~6&oPJ6yj`~PNy{!V<3KEaN``T_Km=V8#BomugBp5mr;xCg z&lIdg!J1o6934-c5V#lnG;EUxURknhO$B3_I1$*Cb(#N!zUar_rydqO+kPL2^8#K@_Z{W$2ENWJn@OD5dtWzz81J5b{L`Z!9fe z#c@dBQ5?{)S%x}gTh`c;QFKev`(pwE9T6lk7Q&GxQf1GVTw_5X1(tftY}s+BG)-bm zn3g56CRiD1BQ3BAUF{?={{sICVM4?9|K-|f*|hS8BjqOrIuVZGL&%0eVyz*v$4h}} ze3+Rm=~mg8oYSy3wuZYN*+=4Qj(j>tFbBLhSI-}1= zQ&ZXDs8oDL;3IgJiuxj9Cx7>~Qe5ZM&uc`Q(4`4-s-M8Wr(j;d0Q2f}Z7(7XTVv~0 zXf%#_0TXA~O0sxa!}X{(?e%njEVIT@a$a|`#<{XloHa&dgLRdb^~KTh+??T*q%Bsn z2%9~nY&G6Vu4JS_$E;(Jol@2jC}9s{l(Mq1!z4*rUn{)WIMT=pH;c`;?PF*{p`SI9cF{GSbCX^>NAMkdFNE(lO}P5l5%@mdB=bB(lKP^aGcDFoUJ(Q2 zYa{Bq%37h35Pm=uHXg|7;$qp2;0mtFrad5cKNk22e#&qPhWmtZK4+f9ZwY$2g6jemRN1)$}ZM6!0-nKe?T z{7mWc#>##<-*6`fSAf@Jge&J5cN}kO4a>`r&tdt+p;lhVYUQQMH6lNa)XEPdweqt_ zt^91@+CfWOv5mideA2lFxo#S$V*BnYcI>HQ=XD;m;ST=xsF&OL+ef$CdH3Ir_w#(v zQ^GDp`9yUF+)Yz*cNceUYB#`LfPwDD9^c)l(gU_sus3}1GTH;zxT_&{jS2zfaGWx|g@PLZo5_WUFh4GUW9IIjKCT4n0t>9^@tl;ztW@{)=t%}D3G$3*D zg50m59-#N#1a%K~AjWV9`E)N1VjqSX?o${dya#!6-`|u(2!S2{#$#b7a<-nxVIP=o zKdi8V#cFu;V0n@;gePDRsMXL&q|pZK3~Jj<2=7-1+Pkte7nW%SEVAiHGEyg_RSjJIKka5Tse6Y zKU|T{t~DL}vWB;s4r(?0S{~H!yY?FX=m8t7VyKbkF~!kG2<#!I`6vlAN;1VG1wt>+p4CdBsih0-M2`ydbXPq=Ko>!@?))Fh6Pjg1-_k z$*3UOx(B#_5`Xh4b(YeyBYFpK;_rhyZxFHm8+dVF6~`KV(Z{9)D;#7HVLZc7pJlI{ iR_?ss=&koguWDe~8@;N9Wnp?%6SHo3mrrf@$A1CSif`Ef delta 1272 zcmY*ZU2qds6#h1w-OX+oZhJ z1#6yR2)nsY9`eMohhZ<0{Fof>*e}5oJRdxi&Lo2d;&_4K01omi@;*8@CN|^zH#tO` zNrpq1;{V7Ij}Iw^BY2VbxF=}y62r?#bITnG_>f_E6>XGNs7zUficYF#7>?t0{-Zl6 zo#c<*k<=-?rQuBp?T*kwF_9*Yl}x3S&yv=+k(8h+!n zKHy2Un{Xd8Tp%^Gs(-|Xiwqwj-RxOrp;$d$uyVz!0DZ#nDLx~oh0shjyOgpj`O-?( zq{-+{MQ8Y^G{7(DQ|ed3?ErtMMDO*Rk?&As zqy3I(Ft*XPmF^&bhX4lJ(MdZOEk7+8l0o^p5NPK64k|qcj@sz1Bjlc4MaV|Dj;IgY zv)68-w%e(69TB?!jQEK<5;g|!W7xZ|ff2$qFxtR`jl+anMO3B?cb!s#Ob^ijwm8&U zh{86i9ir-EG~I_OnnrjXK^3llF{Ts8={1fuf*)*(ZfjD}9mz+ZR#}tWOSSq)eso<% zlH5vSkNq$CPimy_W6{PdH^Az6&3mGOH}1xM!Yr*h5~%Aoa;p#~*M!T?p#^cs#u*!n z)AV9{1Mdn*PBAH55l9McyyuWR?_6t&jgQxCc}g}(6oDONe4L^I>eL|Fv=cGxq7QP2 zqCH5`5X{i^6l(i1hY=dy12nCpjp#T5? diff --git a/bin/bz/bronze/latte/main/Game.class b/bin/bz/bronze/latte/main/Game.class index 7cb348e1bd8b66a20923680ab440baefac100e15..bfba1b845da8cc214a4d8266433ebd4fc90e8f6f 100644 GIT binary patch literal 1269 zcmZ`&+foxj5IsWzn}p#O5-x&VykLTmRlF0tK?IR-kzfSgHe?73$!=;hD+PbT7x;`1 zA*EG*fWP8Ds69!_pg?Wy%xrIWpVMc$fBgFT9l#T$H8e5wXO8uZV_U~U&l^$-yibiF$^THBo-$ux0p2~r4J&cp_^gk ze{W&s2u?R`{iA7R?L&@E_yXubpN3wB;j8@@t)eSA`f-hco26M-O4~}+pu<{poxRVh)9aolC_=Y(9g-ICa>il0!?lN>SVq?A!C z3Ml8&N@$NOObiTF%7ylpR{WQ zFoYr(*~9~Qj+Yv!hq^D(j^mZmLn|sd^K>0;DQWB+EE~mo>$Esjsc=+RBskuvrfV%7 z8pT<6cUL&nR368*0w8d;EON}&T4ISKsczeEmX^ekx@whTg<}dcEr4?hQY5UD5i>_@+pemW|}%L?KBLu`squjozdPr zeuls)9h$&tZK)c4XrnW)IiMXK)&JDQWKqFpH5m}ApvzN1_yl8LFz^kdTfv)WxLrY{ zjEUgAGNvkcM8`6omNBDHJXMr-+5t779Fv6AK#SGUURQnDB+(+F>abH}RGhsP%rz(n z$OklG9(0{c!(G>Q%0!{>N=(d6kOpbd&`!iPU7Py-DB delta 313 zcmey$xrvqQ)W2Q(7#JAL8B`{6eG+73U@J<^OGz!_Vh~~w=V6eT{EA85M23e!lz{^z zB*()b&!E7_z+Ie?Uz(HRoReRi%E-X1p&7-w@b@EDP z`9ve2`HVo!vV%czBamid-~p0cK$?Mpoq?HwgMk;w;(@4P;A7wis{z^w6yXH2k@Sn9 z>*ogQ=b4sU=Q{$=T^e`K5U&&iOg{ zMT`t=8g6cGnqiXznN%2UCYLc?U_Cj2*|2^SgDwv@_cjL8jX)tL1_>Z3 z#lQw6`51&5_!(3g1R1m$gcuANL>R0XL>VN(su&nJ87zT(MxY1-gAouj0x`=D25W>V fTtL$pfaWm+^?-EoK-4hUGT4FD+XG1^21W+}Wt1J| delta 159 zcmZ3<@r9l1)W2Q(7#JAL8EiLlxid|!WKvM29it+HUJi(5$FH_ diff --git a/bin/module-info.class b/bin/module-info.class index 818dafe5157e9a7ad85a1f27adf8bb4a786b5a67..09bb1653e06dac0dc3666d161938f896e12fa022 100644 GIT binary patch delta 78 zcmZ3*c#M(j)W2Q(7#JAL8Tcl0#fb>y7p3dvlxL;q=;arr=B4KdGw@DKQ&(1EU;`>* SU|?q80MlGxlBWSoK?ndbfew-Y delta 51 ucmX@cxQdbM)W2Q(7#JAL8F(gg#Z9bJm6c&&1M(Rdm>4*~G*<(df)D^b2?ziH diff --git a/src/bz/bronze/latte/engine/io/Input.java b/src/bz/bronze/latte/engine/io/Input.java index f46810e..80b3f4e 100644 --- a/src/bz/bronze/latte/engine/io/Input.java +++ b/src/bz/bronze/latte/engine/io/Input.java @@ -1,5 +1,75 @@ package bz.bronze.latte.engine.io; -public class Input { +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWCursorPosCallback; +import org.lwjgl.glfw.GLFWKeyCallback; +import org.lwjgl.glfw.GLFWMouseButtonCallback; -} +public class Input { + private static boolean[] keys = new boolean[GLFW.GLFW_KEY_LAST]; + private static boolean[] buttons = new boolean[GLFW.GLFW_MOUSE_BUTTON_LAST]; + private static double mouseX, mouseY; + + private static GLFWKeyCallback keyboard; + private static GLFWCursorPosCallback mouseMove; + private static GLFWMouseButtonCallback mouseButtons; + + public Input() { + keyboard = new GLFWKeyCallback() { + public void invoke(long window, int key, int scancode, int action, int mods) { + keys[key] = (action != GLFW.GLFW_RELEASE); + } + }; + + mouseMove = new GLFWCursorPosCallback() { + public void invoke(long window, double xPos, double yPos) { + mouseX = xPos; + mouseY = yPos; + } + }; + + mouseButtons = new GLFWMouseButtonCallback() { + public void invoke(long window, int button, int action, int mods) { + buttons[button] = (action != GLFW.GLFW_RELEASE); + } + }; + } + + public static boolean isKeyDown(int key) { + return keys[key]; + } + + public static boolean isButtonDown(int button) { + return buttons[button]; + } + + public static void destroy() { + keyboard.free(); + mouseMove.free(); + mouseButtons.free(); + + GLFW.glfwWindowShouldClose(Window.window); + GLFW.glfwDestroyWindow(Window.window); + GLFW.glfwTerminate(); + } + + public static double getMouseX() { + return mouseX; + } + + public static double getMouseY() { + return mouseY; + } + + public GLFWKeyCallback getKeyboardCallback() { + return keyboard; + } + + public GLFWCursorPosCallback getMouseMoveCallback() { + return mouseMove; + } + + public GLFWMouseButtonCallback getMouseButtonsCallback() { + return mouseButtons; + } +} \ No newline at end of file diff --git a/src/bz/bronze/latte/engine/io/Window.java b/src/bz/bronze/latte/engine/io/Window.java index 15387bc..a95c47a 100644 --- a/src/bz/bronze/latte/engine/io/Window.java +++ b/src/bz/bronze/latte/engine/io/Window.java @@ -2,6 +2,8 @@ package bz.bronze.latte.engine.io; import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFWVidMode; +import org.lwjgl.opengl.GL; +import org.lwjgl.opengl.GL11; public class Window { public int width, height; @@ -11,6 +13,16 @@ public class Window { public static int frames; public static long time; + private static float backgroundR, backgroundG, backgroundB; + + private static boolean isInitialized; + + public void setBackgroundColor(float r, float g, float b) { + backgroundR = r; + backgroundG = g; + backgroundB = b; + } + public static boolean shouldClose() { if (window == 0) { return false; @@ -20,6 +32,11 @@ public class Window { } public static void update() { + if (isInitialized) { + GL11.glClearColor(backgroundR, backgroundG, backgroundB, 1.0f); + GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); + } + GLFW.glfwPollEvents(); frames++; @@ -57,11 +74,18 @@ public class Window { GLFW.glfwSetWindowPos(window, (videoMode.width() - width) / 2, (videoMode.height() - height) / 2); GLFW.glfwMakeContextCurrent(window); + GL.createCapabilities(); + + GLFW.glfwSetKeyCallback(window, new Input().getKeyboardCallback()); + GLFW.glfwSetCursorPosCallback(window, new Input().getMouseMoveCallback()); + GLFW.glfwSetMouseButtonCallback(window, new Input().getMouseButtonsCallback()); + GLFW.glfwShowWindow(window); GLFW.glfwSwapInterval(2); Window.time = System.currentTimeMillis(); + isInitialized = true; } public Window(int width, int height, String title) { @@ -70,4 +94,4 @@ public class Window { Window.title = title; } -} +} \ No newline at end of file diff --git a/src/bz/bronze/latte/main/Game.java b/src/bz/bronze/latte/main/Game.java index d02fef3..2cbbfbb 100644 --- a/src/bz/bronze/latte/main/Game.java +++ b/src/bz/bronze/latte/main/Game.java @@ -1,10 +1,15 @@ package bz.bronze.latte.main; +import org.lwjgl.glfw.GLFW; + +import bz.bronze.latte.engine.io.Input; import bz.bronze.latte.engine.io.Window; public class Game implements Runnable { private void update() { Window.update(); + + if (Input.isButtonDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) System.out.println("X: " + Input.getMouseX() + ", Y: " + Input.getMouseY()); } private void render() { @@ -15,6 +20,10 @@ public class Game implements Runnable { while (!Window.shouldClose()) { update(); render(); + + if (Input.isKeyDown(GLFW.GLFW_KEY_ESCAPE)) return; } + + Input.destroy(); } -} +} \ No newline at end of file diff --git a/src/bz/bronze/latte/main/Main.java b/src/bz/bronze/latte/main/Main.java index d438c5a..81b697f 100644 --- a/src/bz/bronze/latte/main/Main.java +++ b/src/bz/bronze/latte/main/Main.java @@ -16,9 +16,11 @@ public class Main { game.start(); window.create(); + + window.setBackgroundColor(1.0f, 0, 0); } public static void main(String[] args) { init(); } -} +} \ No newline at end of file diff --git a/src/module-info.java b/src/module-info.java index 21c0f4a..bd90d70 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -1,3 +1,4 @@ module latte { requires org.lwjgl.glfw; + requires org.lwjgl.opengl; } \ No newline at end of file