From fa33347cbf9b372de7bd99faf24a5b6d9d316ad4 Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Sun, 27 Apr 2014 10:40:31 +0200 Subject: [PATCH] mouse pointer --- ld48-29.go | 49 +++++++++++++++++++++++++++++++++++++++++++----- log.mdown | 17 +++++++++++++++++ spritesheet.png | Bin 7039 -> 7139 bytes 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/ld48-29.go b/ld48-29.go index f26dcb6..ec7a29f 100644 --- a/ld48-29.go +++ b/ld48-29.go @@ -18,6 +18,12 @@ import ( var _ = pa.Initialize // TODO: remove later +const ( + INPUT_UP = 0 + INPUT_DOWN = 1 + INPUT_LEFT = 2 + INPUT_RIGHT = 3 +) // iterate faster @@ -44,7 +50,7 @@ func onError(err glfw.ErrorCode, desc string) { } func onKey(input chan int, window *glfw.Window, k glfw.Key, s int, action glfw.Action, mods glfw.ModifierKey) { - if action != glfw.Press { + if action != glfw.Press{ return } @@ -53,8 +59,14 @@ func onKey(input chan int, window *glfw.Window, k glfw.Key, s int, action glfw.A if mods & glfw.ModSuper != 0 { reexec() } - case glfw.KeyUp, glfw.KeyDown, glfw.KeyLeft, glfw.KeyRight: - input <- 1 + case glfw.KeyUp: + input <- INPUT_UP + case glfw.KeyDown: + input <- INPUT_DOWN + case glfw.KeyLeft: + input <- INPUT_LEFT + case glfw.KeyRight: + input <- INPUT_RIGHT case glfw.KeyEscape: window.SetShouldClose(true) default: @@ -167,8 +179,8 @@ func main() { go renderer(done, input) go func() { for { - _ = <- input - log.Print("input") + in := <- input + log.Printf("input %d", in) } }() @@ -178,6 +190,10 @@ func main() { // renderer +var mouseX float64 +var mouseY float64 +var mouseVisible bool + func renderer(done chan int, input chan int) { runtime.LockOSThread() @@ -188,16 +204,26 @@ func renderer(done chan int, input chan int) { } defer glfw.Terminate() + glfw.WindowHint(glfw.Resizable, 0) + window, err := glfw.CreateWindow(640, 480, "LD48-29", nil, nil) if err != nil { log.Panic(err) } + window.SetInputMode(glfw.Cursor, glfw.CursorHidden) + onKeyClosure := func (window *glfw.Window, k glfw.Key, s int, action glfw.Action, mods glfw.ModifierKey) { onKey(input, window, k, s, action, mods) } + onMouseClosure := func (window *glfw.Window, x float64, y float64) { + mouseX, mouseY = x, 480 - y + mouseVisible = mouseX < 640 && mouseX >= 0 && mouseY < 480 && mouseY >= 0 + } + window.SetKeyCallback(onKeyClosure) + window.SetCursorPositionCallback(onMouseClosure) window.MakeContextCurrent() @@ -218,10 +244,12 @@ func setup() (textures map[string]gl.Texture, lists map[string]uint) { gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.LIGHTING) gl.Enable(gl.CULL_FACE) + gl.Enable(gl.BLEND) gl.ClearColor(0.0, 0.0, 0.5, 0) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) + gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) textures = map[string]gl.Texture{} lists = map[string]uint{} @@ -241,6 +269,13 @@ func setup() (textures map[string]gl.Texture, lists map[string]uint) { lists["test"] = quad + quad = gl.GenLists(1) + gl.NewList(quad, gl.COMPILE) + spriteQuad(2, 0, 1, 1) + gl.EndList() + + lists["cursor"] = quad + return } @@ -321,4 +356,8 @@ func render(textures map[string]gl.Texture, lists map[string]uint) { x = (math.Sin(a) + 1) / 2 * float64(width) y = (math.Cos(a) + 1) / 2 * float64(height) drawSprite(textures["sprites"], x, y, -a, lists["test"]) + + if mouseVisible { + drawSprite(textures["sprites"], mouseX, mouseY, 0, lists["cursor"]) + } } diff --git a/log.mdown b/log.mdown index e408ae7..926ed20 100644 --- a/log.mdown +++ b/log.mdown @@ -97,3 +97,20 @@ All time is CEST - 20:34 Going concurrent. Goroutines, channels and closures make passing input events outside the locked OpenGL thread *really* easy. + +- 20:51 + + Time for another break. Calories needed. + +- 21:30 + + Back to jamming! ... on and off. + +- 23:45 + + Managed to do some mouse tracking with sprite pointer + +- 10:39 + + Moved out to nearby Starbucks. Connection is crappy, but back to jamming. + diff --git a/spritesheet.png b/spritesheet.png index a0a346173753c47b692cb9d23cffb051254213c1..fb43233bda38d1ad12e4672849c6e450f427d600 100644 GIT binary patch delta 2801 zcmexw_Sk%b6<_@nPZ!6K3dXm0ZkIkeCdwKRlwA~{^RJNSR|wC!1AGqW4j8_;Z202% zMh(u(F56co`ZNDM;P~*IsM&QXUe3*OH?|kB@s@vmt-t^8mv4`{85*6rYG$7M_5S~_ z^RFiVe}4bpB3t{{=}R5He*Jv-RAshX!-4q@4h(-dyIzQJtP$;CR;aK1xuNXR{M(ZC ze@|~e-2{*Ua*7p9ovBt#*o_3zSz=p$5b~gKk)KD+nwSArpdnle}%UmJU-X`>W}O_TNFR6 zIB?gx!QEQwYxPv||0RBxTkZe;T?}SG2wW`+;8zx2iZShNIcMj77!7ocY=80|o_PzU9e%ygyEBDsfFwcme z-X~G@yzj-eAE%|W^%k)GJ+Oa!y$nP1wW)cW0yi8V$T0k@dza&0 zcdhEy`MI^0|9uR;d%vE(&Hl~L_*yv!wUwrfOmkWM=5x)NtSBlXD9z2$(Cb+0zF@M0 z48zH{$HgYQiDuPLc-wX_$-Yi4;ol#jM&|YNSD$CDc(V8E_PpO)_W!?^Q+Im%*=y(b zy?!pj(7!;R_05(UTldGC)O}{U=KuEVW61-5c9l#ypvb~FqEvAWGN(}qQJm*@YOU2c1Fev3%#CsBusFSVc2fAjc3+p*X_sR z??n_dn!aHFxA*U328k`}O1v8m@G(7Su=r5-V)Dk%=ch^S-&PkspMApI&TA|jB|<-p ze9dlNNVG41TbK9m&*azFjT`(5bA{Kjn28B6NH@Rgb5I9IXus}cYoYA=x2m@<&fR{V zWz)_5d*;_(bG~=)r#e&QSH9T)_(SLmbwa2f5kyoEp%dRXr(18@eC=}GyEmtQrZ?@3 zkJ`WGZ{qp?uRb#vd9LLYc%kyaDs@)QriF*=-rf3p=g&{|>+91Q=03U=!)P4e6RaZ!n&&d z{jcMU6Z90`atf>vwqSSICSBG2_s7hJpP#*1`1aJTv*Uj-@q5_)U2iY{`&YgBr|x~T zX#3ym<_9y_H0=}Fa5?GPzq*S*&T>cCZ@u21&hYv5r9h^30Re_~jm?u)4D$4Ai=Ua8absFGTga!!zkmN_+6>` z%H*@GR~E?s`2MY*IpM;tOS+6q)*N$~9~}6-(Er#u`{=Acw|>Re$~ly&Md=DFT=0Bw z+T>=6bNk;rTYvBT`PqM6{CNheqg!_h-H32t$l+OK%`}(g5rapb{kF*uC9~_dPtS2L zzh@_WBJKaDx^I#EmDSJZbEJR@tMzz8=mL2mgdRXd=0dVUNa6nZd2dggi}Ig5Pg0s` zdgkN}VqyXt8yId#gp{*bae~T?x}3?^#PaHOzdcT8dUjr4(Bi|doxeaObad_OZT`Q1 zzd!qId(G{fzi)Qe`7wUr_!V@(uRHShZ`a4>`U!up#M#edJhR^0om0lifk9@`8NW#f z_J9kz|9_^;v(EbSRo{Nz z<&??1vfqlYzkB}dy#3BPTjm!c*PnSMBnvPyZZKT&j-y1VgIQtc-y2Mm&j@GL-;3KM zd$;npkHYM~r+?o}w|(+0 z|6AnWpI3iXvVAZ;UE}_sfQjirfol07mVI1v?1bLD?w@{t@BMlI3m?3FF8}|>zt8pN zC*OX5UU#i7|IhFBH?QBayVO^o|Nkh%484En#s6-%x8G!O>Hg36w{O2>ywAUW{l(&@ z61iK#KQ?pOd=Yx^dG3KYfy+n#*FD_tQ*YOluzq8&^8*d0a^?lE;{UxoRR4e0zt37M zeVb(FKEKCg&b;8!qx;eaDp>k-3XB=-?3r%}zx-Pt|L6Mm+y638ytL21{QdGq+vf>7 zOzr{^H5?YPf9A*kelN@RpP!MRv3~>C+~k=Dk{Eo9Z~b2MKkVTCU-!Fy%sjA-$vmDZ z$9l>=4uK!{SROIVxOY1CXKKyAYxk=fEf}uxuT^Dax(cdlZL_$SP1?raW@qYq{JPz0 ghW*>>{xfgm5V~2K@m#Npfq{X+)78&qol`;+0I?rjM*si- delta 2716 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