mirror of
https://github.com/GayPizzaSpecifications/voxelotl-engine.git
synced 2025-08-03 13:11:33 +00:00
basis for random subsystem
This commit is contained in:
@ -3,8 +3,6 @@ add_executable(Voxelotl MACOSX_BUNDLE
|
|||||||
|
|
||||||
test.png
|
test.png
|
||||||
|
|
||||||
Chunk.swift
|
|
||||||
|
|
||||||
shadertypes.h
|
shadertypes.h
|
||||||
shader.metal
|
shader.metal
|
||||||
|
|
||||||
@ -14,12 +12,17 @@ add_executable(Voxelotl MACOSX_BUNDLE
|
|||||||
AABB.swift
|
AABB.swift
|
||||||
Color.swift
|
Color.swift
|
||||||
|
|
||||||
|
Random/RandomProvider.swift
|
||||||
|
Random/Arc4Random.swift
|
||||||
|
|
||||||
NSImageLoader.swift
|
NSImageLoader.swift
|
||||||
Renderer.swift
|
Renderer.swift
|
||||||
GameController.swift
|
GameController.swift
|
||||||
|
FPSCalculator.swift
|
||||||
|
|
||||||
|
Chunk.swift
|
||||||
Camera.swift
|
Camera.swift
|
||||||
Player.swift
|
Player.swift
|
||||||
FPSCalculator.swift
|
|
||||||
GameDelegate.swift
|
GameDelegate.swift
|
||||||
Application.swift
|
Application.swift
|
||||||
|
|
||||||
@ -61,3 +64,4 @@ set_source_files_properties(test.png PROPERTIES MACOSX_PACKAGE_LOCATION Resource
|
|||||||
|
|
||||||
source_group("Resources" FILES Assets.xcassets test.png)
|
source_group("Resources" FILES Assets.xcassets test.png)
|
||||||
source_group("Source Files" REGULAR_EXPRESSION "\\.(swift|metal)$")
|
source_group("Source Files" REGULAR_EXPRESSION "\\.(swift|metal)$")
|
||||||
|
source_group("Source Files\\Random" REGULAR_EXPRESSION "Random/")
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import simd
|
import simd
|
||||||
import Foundation
|
|
||||||
|
|
||||||
struct Instance {
|
struct Instance {
|
||||||
let position: SIMD3<Float>
|
let position: SIMD3<Float>
|
||||||
@ -26,6 +25,7 @@ class Game: GameDelegate {
|
|||||||
var player = Player()
|
var player = Player()
|
||||||
var projection: matrix_float4x4 = .identity
|
var projection: matrix_float4x4 = .identity
|
||||||
var chunk = Chunk(position: .zero)
|
var chunk = Chunk(position: .zero)
|
||||||
|
var random = Arc4Random.instance
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
player.position = SIMD3(0.5, Float(Chunk.chunkSize) + 0.5, 0.5)
|
player.position = SIMD3(0.5, Float(Chunk.chunkSize) + 0.5, 0.5)
|
||||||
@ -37,8 +37,8 @@ class Game: GameDelegate {
|
|||||||
.magenta, .yellow, .cyan
|
.magenta, .yellow, .cyan
|
||||||
]
|
]
|
||||||
chunk.fill(allBy: {
|
chunk.fill(allBy: {
|
||||||
if (arc4random() & 0x1) == 0x1 {
|
if (random.next() & 0x1) == 0x1 {
|
||||||
.solid(colors[Int(arc4random_uniform(UInt32(colors.count)))])
|
.solid(colors[random.next(in: 0..<colors.count)])
|
||||||
} else {
|
} else {
|
||||||
.air
|
.air
|
||||||
}
|
}
|
||||||
@ -86,8 +86,10 @@ class Game: GameDelegate {
|
|||||||
color: Color<Float16>(color).linear)
|
color: Color<Float16>(color).linear)
|
||||||
} else { nil }
|
} else { nil }
|
||||||
}
|
}
|
||||||
|
if !instances.isEmpty {
|
||||||
renderer.batch(instances: instances, camera: self.camera)
|
renderer.batch(instances: instances, camera: self.camera)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func resize(_ size: Size<Int>) {
|
func resize(_ size: Size<Int>) {
|
||||||
self.camera.setSize(size)
|
self.camera.setSize(size)
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
//
|
|
||||||
// Random.swift
|
|
||||||
// voxelotl
|
|
||||||
//
|
|
||||||
// Created by a dinosaur on 20/8/2024.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
24
Sources/Voxelotl/Random/Arc4Random.swift
Normal file
24
Sources/Voxelotl/Random/Arc4Random.swift
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
public class Arc4Random: RandomProvider {
|
||||||
|
public typealias Output = UInt32
|
||||||
|
|
||||||
|
public static var min: UInt32 { 0x00000000 }
|
||||||
|
public static var max: UInt32 { 0xFFFFFFFF }
|
||||||
|
|
||||||
|
private init() {}
|
||||||
|
public static let instance = Arc4Random()
|
||||||
|
|
||||||
|
public func stir() {
|
||||||
|
arc4random_stir()
|
||||||
|
}
|
||||||
|
|
||||||
|
public func next() -> UInt32 {
|
||||||
|
arc4random()
|
||||||
|
}
|
||||||
|
|
||||||
|
public func next(in bound: Range<Int>) -> Int {
|
||||||
|
assert(bound.upperBound <= Self.max)
|
||||||
|
return bound.lowerBound + Int(arc4random_uniform(UInt32(bound.upperBound)))
|
||||||
|
}
|
||||||
|
}
|
8
Sources/Voxelotl/Random/RandomProvider.swift
Normal file
8
Sources/Voxelotl/Random/RandomProvider.swift
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
public protocol RandomProvider {
|
||||||
|
associatedtype Output: FixedWidthInteger
|
||||||
|
|
||||||
|
static var min: Output { get }
|
||||||
|
static var max: Output { get }
|
||||||
|
|
||||||
|
mutating func next() -> Output
|
||||||
|
}
|
Reference in New Issue
Block a user