Skip to content

Commit b297fb5

Browse files
committed
Allow rendering above and below GameView
1 parent ecef10f commit b297fb5

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

Sources/GateEngine/ECS/Base/ECSContext.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,17 +321,22 @@ extension ECSContext {
321321
return shouldRender
322322
}
323323

324-
func updateRendering(into view: GameView, deltaTime: Float) {
324+
func beginRendering() {
325325
if let performance = performance {
326326
performance.startRenderingSystems()
327327
}
328-
328+
}
329+
330+
func updateRendering(into view: GameView, deltaTime: Float, for phase: RenderingSystem.Phase) {
329331
for system in self.renderingSystems {
332+
guard type(of: system).phase == phase else {continue}
330333
self.performance?.beginStatForSystem(system)
331334
system.willRender(into: view, withTimePassed: deltaTime, context: self)
332335
self.performance?.endCurrentStatistic()
333336
}
334-
337+
}
338+
339+
func endRendering() {
335340
if let performance = performance {
336341
performance.endRenderingSystems()
337342
performance.finalizeRenderingSystemsFrameTime()

Sources/GateEngine/ECS/Base/RenderingSystem.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,16 @@
8383

8484
}
8585

86+
87+
/**
88+
The major sort order for rendering systems.
89+
90+
The phase value decides what layer this systems content will be drawn relative to it's owning GameView
91+
*/
92+
open class var phase: Phase {
93+
return .afterGameView
94+
}
95+
8696
/**
8797
Provide a sorting order to ensure this system is processed at the right time.
8898

@@ -96,6 +106,13 @@
96106
return .dontCare
97107
}
98108
}
109+
110+
extension RenderingSystem {
111+
public enum Phase: UInt {
112+
/// Draws before the GameView, resulting in content below
113+
case beforeGameView
114+
/// Draws after the GameView, resulting in content ontop
115+
case afterGameView
99116
}
100117
}
101118

Sources/GateEngine/UI/GameViewController.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,19 @@ public final class GameView: View {
5858
}
5959

6060
if let gameViewController {
61-
let highPrecisionDeltaTime = self.deltaTimeHelper.getDeltaTime()
61+
gameViewController.context.beginRendering()
6262

63+
let highPrecisionDeltaTime = self.deltaTimeHelper.getDeltaTime()
6364
let deltaTime = Float(highPrecisionDeltaTime)
6465

65-
gameViewController.context.updateRendering(into: self, deltaTime: deltaTime)
66+
// Draw below content
67+
gameViewController.context.updateRendering(into: self, deltaTime: deltaTime, for: .beforeGameView)
68+
// Draw GameView
6669
gameViewController.render(context: gameViewController.context, into: self, withTimePassed: deltaTime)
70+
// Draw above content
71+
gameViewController.context.updateRendering(into: self, deltaTime: deltaTime, for: .afterGameView)
72+
73+
gameViewController.context.endRendering()
6774

6875
if mode == .offScreen {
6976
canvas.insert(

0 commit comments

Comments
 (0)