mirror of
https://github.com/ScrelliCopter/NeHe-SDL_GPU.git
synced 2025-06-19 21:49:17 +10:00
swift: Decouple lesson09 star behaviour
This commit is contained in:
@@ -8,6 +8,35 @@ import SDLSwift
|
|||||||
import NeHe
|
import NeHe
|
||||||
import simd
|
import simd
|
||||||
|
|
||||||
|
extension Lesson9.Star
|
||||||
|
{
|
||||||
|
init(coeff: Float, random: inout NeHeRandom)
|
||||||
|
{
|
||||||
|
self.angle = 0.0
|
||||||
|
self.distance = 5.0 * coeff
|
||||||
|
self.color = Self.nextColor(random: &random)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func update(coeff: Float, random: inout NeHeRandom)
|
||||||
|
{
|
||||||
|
self.angle += coeff
|
||||||
|
self.distance -= 0.01
|
||||||
|
if self.distance < 0.0
|
||||||
|
{
|
||||||
|
self.distance += 5.0
|
||||||
|
self.color = Self.nextColor(random: &random)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func nextColor(random: inout NeHeRandom) -> SIMD3<UInt8>
|
||||||
|
{
|
||||||
|
.init(
|
||||||
|
UInt8(truncatingIfNeeded: random.next() % 256),
|
||||||
|
UInt8(truncatingIfNeeded: random.next() % 256),
|
||||||
|
UInt8(truncatingIfNeeded: random.next() % 256))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct Lesson9: AppDelegate
|
struct Lesson9: AppDelegate
|
||||||
{
|
{
|
||||||
struct Vertex
|
struct Vertex
|
||||||
@@ -179,15 +208,7 @@ struct Lesson9: AppDelegate
|
|||||||
self.instanceXferBuffer = instanceXferBuffer
|
self.instanceXferBuffer = instanceXferBuffer
|
||||||
|
|
||||||
// Initialise stars
|
// Initialise stars
|
||||||
self.stars = (0..<numStars).map
|
self.stars = (0..<numStars).map { i in .init(coeff: Float(i) / Float(numStars), random: &self.random) }
|
||||||
{ i in .init(
|
|
||||||
angle: 0.0,
|
|
||||||
distance: 5.0 * (Float(i) / Float(numStars)),
|
|
||||||
color: .init(
|
|
||||||
UInt8(truncatingIfNeeded: self.random.next() % 256),
|
|
||||||
UInt8(truncatingIfNeeded: self.random.next() % 256),
|
|
||||||
UInt8(truncatingIfNeeded: self.random.next() % 256)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func quit(ctx: NeHeContext)
|
func quit(ctx: NeHeContext)
|
||||||
@@ -242,15 +263,7 @@ struct Lesson9: AppDelegate
|
|||||||
|
|
||||||
// Update star
|
// Update star
|
||||||
var newStar = star
|
var newStar = star
|
||||||
newStar.angle += Float(starIDX) / Float(numStars)
|
newStar.update(coeff: Float(starIDX) / Float(numStars), random: &self.random)
|
||||||
newStar.distance -= 0.01
|
|
||||||
if newStar.distance < 0.0
|
|
||||||
{
|
|
||||||
newStar.distance += 5.0
|
|
||||||
newStar.color = SIMD3(newStar.color.indices.map { _ in
|
|
||||||
UInt8(truncatingIfNeeded: self.random.next() % 256)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
self.stars[starIDX] = newStar
|
self.stars[starIDX] = newStar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user