import Foundation import simd internal class SpriteTestGame: GameDelegate { private var spriteBatch: SpriteBatch! private var player = TestPlayer(position: .one * 10) private var texture: RendererTexture2D! private var wireShark: RendererTexture2D! private static let levelWidth = 40, levelHeight = 23 private var level: [UInt8] init() { self.level = .init(repeating: 0, count: Self.levelWidth * Self.levelHeight) for i in 0..(renderer.frame.size)) * 0.01), destination: nil, color: .init(renderer.clearColor).setAlpha(0.7)) // Draw level let scale: Float = 64 for y in 0..(renderer.frame.size)) mpos *= SIMD2(self.spriteBatch.viewport!.size) } let inter = 0.5 + sin(player.rotate * 10) * 0.5 let color = Color.green.mix(.white, 0.3) let mesh = Mesh.init(vertices: [ .init(position: mpos, texCoord: .zero, color: .one), .init(position: mpos + .init(50, 0) + .init(-50, 50) * inter, texCoord: .zero, color: SIMD4(color)), .init(position: mpos + .init(0, 50) + .init( 50, -50) * inter, texCoord: .zero, color: SIMD4(color)), .init(position: mpos + .init(80, 80), texCoord: .zero, color: .zero) ], indices: [ 0, 1, 2, 1, 2, 3 ]) if Mouse.down(.left) { self.spriteBatch.draw(self.texture, mesh: mesh) } else { self.spriteBatch.draw(self.texture, vertices: mesh.vertices[..<3]) } self.spriteBatch.end() } } fileprivate struct TestPlayer { var position: SIMD2 var rotate: Float = 0 } fileprivate extension Color { func setAlpha(_ newAlpha: T) -> Self { return .init(r: r, g: g, b: b, a: newAlpha) } }