1- // SPDX-FileCopyrightText: 2024 O21 contributors <https://github.com/ForNeVeR/O21>
1+ // SPDX-FileCopyrightText: 2023-2025 O21 contributors <https://github.com/ForNeVeR/O21>
22//
33// SPDX-License-Identifier: MIT
44
@@ -11,6 +11,7 @@ open System.Threading
1111open System.Threading .Tasks
1212open JetBrains.Lifetimes
1313open O21.Game .Engine
14+ open Raylib_CSharp.Camera .Cam2D
1415open Raylib_CSharp.Colors
1516open type Raylib_CSharp.Raylib
1617open type Raylib_CSharp.Rendering .Graphics
@@ -37,6 +38,7 @@ type Game(window: WindowParameters, content: LocalContent, data: U95Data) =
3738 Language = DefaultLanguage
3839 Engine = TickEngine.Create( Instant.Now(), newRandom(), data.Levels[ GameRules.StartingLevel])
3940 MusicPlayer = None
41+ Camera = Unchecked.defaultof<_>
4042 }
4143
4244 let mutable state = initialState
@@ -64,15 +66,18 @@ type Game(window: WindowParameters, content: LocalContent, data: U95Data) =
6466 Language = state.Language }
6567
6668 member this.Update () =
67- let input = Input.Handle( state.Scene. Camera)
69+ let input = Input.Handle( state.Camera)
6870 let time = Instant.Now()
6971
7072 pumpQueue()
7173
7274 let updatedState , event = state.Scene.Update( input, time, state)
73-
75+
7476 state <- updatedState
75-
77+
78+ let camera = DrawSceneHelper.ConfigureCamera { window with RenderTargetSize = state.Scene.RenderTargetSize }
79+ state <- { state with Camera = camera }
80+
7681 let scene : IScene =
7782 match event with
7883 | Some ( NavigateTo Scene.MainMenu) -> MainMenuScene.Init( window, content, data)
@@ -98,19 +103,20 @@ type Game(window: WindowParameters, content: LocalContent, data: U95Data) =
98103 state <- { state with SoundsToStartPlaying = Set.empty }
99104
100105 member private _.WithScissorMode ( action : unit -> unit ) =
101- let cam = state.Scene.Camera
102- let W = float32 GameRules.GameScreenWidth * cam.Zoom |> int
103- let H = float32 GameRules.GameScreenHeight * cam.Zoom |> int
106+ let cam = state.Camera
107+ let struct ( x , y ) = state.Scene.RenderTargetSize
108+ let W = float32 x * cam.Zoom |> int
109+ let H = float32 y * cam.Zoom |> int
104110 let offsetX = cam.Target.X * cam.Zoom |> int |> Math.Abs
105111 let offsetY = cam.Target.Y * cam.Zoom |> int |> Math.Abs
106112 BeginScissorMode( offsetX, offsetY, W, H)
107113 action()
108114 EndScissorMode()
109-
115+
110116 member this.Draw () =
111117 BeginDrawing()
112118 ClearBackground( Color.White)
113- BeginMode2D( state.Scene. Camera)
119+ BeginMode2D state.Camera
114120 this.WithScissorMode( fun () ->
115121 state.Scene.Draw state)
116122 EndMode2D()
0 commit comments