Mercurial > games > semicongine
comparison examples/E10_pong.nim @ 145:a4e6e76128e6
add: upgrade all simple examples to new engine version
author | Sam <sam@basx.dev> |
---|---|
date | Wed, 26 Apr 2023 02:15:43 +0700 |
parents | 8bfcaed87cd6 |
children | 253dd797e719 |
comparison
equal
deleted
inserted
replaced
144:01881f9296fa | 145:a4e6e76128e6 |
---|---|
1 import semicongine | 1 import semicongine |
2 | |
3 type | |
4 Vertex = object | |
5 position: PositionAttribute[Vec2] | |
6 color: ColorAttribute[Vec3] | |
7 transform: ModelTransformAttribute | |
8 Uniforms = object | |
9 view: ViewProjectionTransform | |
10 | 2 |
11 const | 3 const |
12 barcolor = RGBfromHex("5A3F00").gamma(2.2) | 4 barcolor = RGBfromHex("5A3F00").gamma(2.2) |
13 barSize = 0.1'f | 5 barSize = 0.1'f |
14 barWidth = 0.01'f | 6 barWidth = 0.01'f |
16 levelRatio = 1 | 8 levelRatio = 1 |
17 ballSize = 0.01'f | 9 ballSize = 0.01'f |
18 backgroundColor = RGBAfromHex("FAC034").gamma(2.2) | 10 backgroundColor = RGBAfromHex("FAC034").gamma(2.2) |
19 ballSpeed = 60'f | 11 ballSpeed = 60'f |
20 | 12 |
21 echo RGBAfromHex("FAC034") | |
22 echo RGBAfromHex("FAC034").gamma(2.2) | |
23 var | 13 var |
24 uniforms = Uniforms() | 14 level: Entity |
25 pipeline: RenderPipeline[Vertex, Uniforms] | 15 ballVelocity = newVec2f(1, 1).normalized * ballSpeed |
26 level: Thing | |
27 ballVelocity = Vec2([1'f, 1'f]).normalized * ballSpeed | |
28 | 16 |
17 #[ | |
29 proc globalUpdate(engine: var Engine; t, dt: float32) = | 18 proc globalUpdate(engine: var Engine; t, dt: float32) = |
30 var height = float32(engine.vulkan.frameSize.y) / float32( | 19 var height = float32(engine.vulkan.frameSize.y) / float32( |
31 engine.vulkan.frameSize.x) | 20 engine.vulkan.frameSize.x) |
32 var width = 1'f | 21 var width = 1'f |
33 uniforms.view.value = ortho[float32]( | 22 uniforms.view.value = ortho[float32]( |
66 barBottom = player.transform.col(3).y + barSize/2 | 55 barBottom = player.transform.col(3).y + barSize/2 |
67 ballTop = ball.transform.col(3).y - ballSize/2 | 56 ballTop = ball.transform.col(3).y - ballSize/2 |
68 ballBottom = ball.transform.col(3).y + ballSize/2 | 57 ballBottom = ball.transform.col(3).y + ballSize/2 |
69 if ballTop >= barTop and ballBottom <= barBottom: | 58 if ballTop >= barTop and ballBottom <= barBottom: |
70 ballVelocity[0] = abs(ballVelocity[0]) | 59 ballVelocity[0] = abs(ballVelocity[0]) |
71 | 60 ]# |
72 | 61 |
73 when isMainModule: | 62 when isMainModule: |
74 var myengine = igniteEngine("Pong") | 63 var myengine = initEngine("Pong") |
75 myengine.maxFPS = 61 | 64 level = newEntity("Level") |
76 level = newThing("Level") | 65 var playerbarmesh = rect() |
77 var playerbarmesh = quad[Vertex, Vec2, float32]() | |
78 playerbarmesh.vertexData.color.data = @[barcolor, barcolor, barcolor, barcolor] | 66 playerbarmesh.vertexData.color.data = @[barcolor, barcolor, barcolor, barcolor] |
79 playerbarmesh.vertexData.transform.data = @[Unit44] | 67 var playerbar = newEntity("playerbar", playerbarmesh) |
80 var playerbar = newThing("playerbar", playerbarmesh) | 68 playerbar.transform = scale3d(barWidth, barSize, 1'f) * translate3d(0.5'f, 0'f, 0'f) |
81 playerbar.transform = scale3d(barWidth, barSize, 1'f) * translate3d(0.5'f, | 69 var player = newEntity("player", playerbar) |
82 0'f, 0'f) | |
83 var player = newThing("player", playerbar) | |
84 player.transform = translate3d(0'f, 0.3'f, 0'f) | 70 player.transform = translate3d(0'f, 0.3'f, 0'f) |
85 level.add player | 71 level.add player |
86 | 72 |
87 var ballmesh = circle[Vertex, Vec2, float32]() | 73 var ballmesh = circle() |
88 ballmesh.vertexData.color.data = newSeq[Vec3]( | 74 ballmesh.vertexData.color.data = newSeq[Vec3](ballmesh.vertexData.position.data.len) |
89 ballmesh.vertexData.position.data.len) | |
90 for i in 0 ..< ballmesh.vertexData.color.data.len: | 75 for i in 0 ..< ballmesh.vertexData.color.data.len: |
91 ballmesh.vertexData.color.data[i] = ballcolor | 76 ballmesh.vertexData.color.data[i] = ballcolor |
92 ballmesh.vertexData.transform.data = @[Unit44] | 77 ballmesh.vertexData.transform.data = @[Unit44] |
93 var ball = newThing("ball", ballmesh) | 78 var ball = newEntity("ball", ballmesh) |
94 ball.transform = scale3d(ballSize, ballSize, 1'f) * translate3d(10'f, 10'f, 0'f) | 79 ball.transform = scale3d(ballSize, ballSize, 1'f) * translate3d(10'f, 10'f, 0'f) |
95 level.add ball | 80 level.add ball |
96 | 81 |
97 # upload data, prepare shaders, etc | |
98 const vertexShader = generateVertexShaderCode[Vertex, Uniforms]() | |
99 const fragmentShader = generateFragmentShaderCode[Vertex]() | |
100 pipeline = setupPipeline[Vertex, Uniforms, uint16]( | |
101 myengine, | |
102 level, | |
103 vertexShader, | |
104 fragmentShader | |
105 ) | |
106 pipeline.clearColor = backgroundColor | 82 pipeline.clearColor = backgroundColor |
107 # show something | 83 # show something |
108 myengine.run(pipeline, globalUpdate) | 84 myengine.run(pipeline, globalUpdate) |
109 pipeline.trash() | 85 |
110 myengine.trash() | 86 myengine.destroy() |