Mercurial > games > semicongine
comparison examples/E04_input.nim @ 664:c33c8e156e3e
did: update examples to use new API for scene + scene globals
author | Sam <sam@basx.dev> |
---|---|
date | Mon, 08 May 2023 21:21:49 +0700 |
parents | 3f13de7d8ec4 |
children | d84b2e88776a |
comparison
equal
deleted
inserted
replaced
663:af9ab61aa87e | 664:c33c8e156e3e |
---|---|
1 import std/enumerate | 1 import std/enumerate |
2 import std/strutils | |
3 import std/typetraits | 2 import std/typetraits |
4 import std/times | |
5 import std/math | 3 import std/math |
6 | 4 |
7 import semicongine | 5 import semicongine |
8 | 6 |
9 const | 7 const |
56 CtrlL, SuperL, AltL, Space, AltR, SuperR, CtrlR, Left, Down, Right | 54 CtrlL, SuperL, AltL, Space, AltR, SuperR, CtrlR, Left, Down, Right |
57 ] | 55 ] |
58 | 56 |
59 # build keyboard and cursor meshes | 57 # build keyboard and cursor meshes |
60 var | 58 var |
61 scene: Entity | 59 scene: Scene |
62 keyvertexpos: seq[Vec3f] | 60 keyvertexpos: seq[Vec3f] |
63 keyvertexcolor: seq[Vec3f] | 61 keyvertexcolor: seq[Vec3f] |
64 keymeshindices: seq[array[3, uint16]] | 62 keymeshindices: seq[array[3, uint16]] |
65 rowpos = newVec2f(0, 0) | 63 rowpos = newVec2f(0, 0) |
66 i = 0'u16 | 64 i = 0'u16 |
134 ], | 132 ], |
135 indices= @[[0'u16, 1'u16, 2'u16], [2'u16, 3'u16, 0'u16]], | 133 indices= @[[0'u16, 1'u16, 2'u16], [2'u16, 3'u16, 0'u16]], |
136 ) | 134 ) |
137 | 135 |
138 # define mesh objects | 136 # define mesh objects |
139 scene = newEntity("scene") | 137 scene = newScene("scene", newEntity("scene")) |
140 scene.add newEntity("background", backgroundmesh) | 138 scene.root.add newEntity("background", backgroundmesh) |
141 let keyboard = newEntity("keyboard", keyboardmesh) | 139 let keyboard = newEntity("keyboard", keyboardmesh) |
142 keyboard.transform = translate3d( | 140 keyboard.transform = translate3d( |
143 -float32(rowWidth) / 2'f32, | 141 -float32(rowWidth) / 2'f32, |
144 -float32(tupleLen(keyRows) * (keyDimension + keyGap) - keyGap) / 2'f32, | 142 -float32(tupleLen(keyRows) * (keyDimension + keyGap) - keyGap) / 2'f32, |
145 0'f32 | 143 0'f32 |
146 ) | 144 ) |
147 scene.add newEntity("keyboard-center", keyboard) | 145 scene.root.add newEntity("keyboard-center", keyboard) |
148 scene.add newEntity("cursor", cursormesh) | 146 scene.root.add newEntity("cursor", cursormesh) |
149 | 147 |
150 # shaders | 148 # shaders |
151 const | 149 const |
152 vertexInput = @[ | 150 vertexInput = @[ |
153 attr[Vec3f]("position"), | 151 attr[Vec3f]("position"), |
173 ) | 171 ) |
174 | 172 |
175 # set up rendering | 173 # set up rendering |
176 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0.5))) | 174 myengine.setRenderer(myengine.gpuDevice.simpleForwardRenderPass(vertexCode, fragmentCode, clearColor=newVec4f(0, 0, 0.5))) |
177 myengine.addScene(scene, vertexInput, transformAttribute="transform") | 175 myengine.addScene(scene, vertexInput, transformAttribute="transform") |
178 var projection = initShaderGlobal("projection", Unit4f32) | 176 scene.addShaderGlobal("projection", Unit4f32) |
179 scene.add projection | |
180 | 177 |
181 # mainloop | 178 # mainloop |
182 while myengine.updateInputs() == Running: | 179 while myengine.updateInputs() == Running: |
183 if myengine.windowWasResized(): | 180 if myengine.windowWasResized(): |
184 setValue[Mat4](projection.value, ortho[float32]( | 181 setShaderGlobal(scene, "projection", |
185 0'f32, float32(myengine.getWindow().size[0]), | 182 ortho[float32]( |
186 0'f32, float32(myengine.getWindow().size[1]), | 183 0'f32, float32(myengine.getWindow().size[0]), |
187 0'f32, 1'f32, | 184 0'f32, float32(myengine.getWindow().size[1]), |
188 )) | 185 0'f32, 1'f32, |
186 ) | |
187 ) | |
189 let | 188 let |
190 winsize = myengine.getWindow().size | 189 winsize = myengine.getWindow().size |
191 center = translate3d(float32(winsize[0]) / 2'f32, float32(winsize[1]) / 2'f32, 0.1'f32) | 190 center = translate3d(float32(winsize[0]) / 2'f32, float32(winsize[1]) / 2'f32, 0.1'f32) |
192 scene.firstWithName("keyboard-center").transform = center | 191 scene.root.firstWithName("keyboard-center").transform = center |
193 scene.firstWithName("background").transform = scale3d(float32(winsize[0]), float32(winsize[1]), 1'f32) | 192 scene.root.firstWithName("background").transform = scale3d(float32(winsize[0]), float32(winsize[1]), 1'f32) |
194 | 193 |
195 let mousePos = translate3d(myengine.mousePosition().x + 20, myengine.mousePosition().y + 20, 0'f32) | 194 let mousePos = translate3d(myengine.mousePosition().x + 20, myengine.mousePosition().y + 20, 0'f32) |
196 scene.firstWithName("cursor").transform = mousePos | 195 scene.root.firstWithName("cursor").transform = mousePos |
197 | 196 |
198 var mesh = Mesh(scene.firstWithName("keyboard").components[0]) | 197 var mesh = Mesh(scene.root.firstWithName("keyboard").components[0]) |
199 for (index, key) in enumerate(keyIndices): | 198 for (index, key) in enumerate(keyIndices): |
200 if myengine.keyWasPressed(key): | 199 if myengine.keyWasPressed(key): |
201 let baseIndex = uint32(index * 4) | 200 let baseIndex = uint32(index * 4) |
202 mesh.updateMeshData("color", baseIndex + 0, activeColor) | 201 mesh.updateMeshData("color", baseIndex + 0, activeColor) |
203 mesh.updateMeshData("color", baseIndex + 1, activeColor) | 202 mesh.updateMeshData("color", baseIndex + 1, activeColor) |