Title here
Summary here
1package main
2
3import (
4 "embed"
5 "log"
6
7 "github.com/TheBitDrifter/bappa/blueprint"
8 "github.com/TheBitDrifter/bappa/coldbrew"
9 "github.com/TheBitDrifter/bappa/coldbrew/coldbrew_clientsystems"
10 "github.com/TheBitDrifter/bappa/coldbrew/coldbrew_rendersystems"
11
12 "github.com/TheBitDrifter/bappa/warehouse"
13)
14
15//go:embed assets/*
16var assets embed.FS
17
18func main() {
19 client := coldbrew.NewClient(
20 640,
21 360,
22 10,
23 10,
24 10,
25 assets,
26 )
27 client.SetTitle("Split Screen Camera")
28 err := client.RegisterScene(
29 "Example Scene",
30 640,
31 360,
32 exampleScenePlan,
33 []coldbrew.RenderSystem{},
34 []coldbrew.ClientSystem{
35 &coldbrew_clientsystems.BackgroundScrollSystem{},
36 &cameraMovementSystem{},
37 },
38 []blueprint.CoreSystem{},
39 )
40 if err != nil {
41 log.Fatal(err)
42 }
43 client.RegisterGlobalRenderSystem(coldbrew_rendersystems.GlobalRenderer{})
44
45 client.SetCameraBorderSize(6)
46
47 quarterWidth := 640 / 2
48 quarterHeight := 360 / 2
49 cam1, err := client.ActivateCamera()
50 if err != nil {
51 log.Fatal(err)
52 }
53 cam2, err := client.ActivateCamera()
54 if err != nil {
55 log.Fatal(err)
56 }
57 cam3, err := client.ActivateCamera()
58 if err != nil {
59 log.Fatal(err)
60 }
61 cam4, err := client.ActivateCamera()
62 if err != nil {
63 log.Fatal(err)
64 }
65 cam1.SetDimensions(quarterWidth, quarterHeight)
66 cam2.SetDimensions(quarterWidth, quarterHeight)
67 cam3.SetDimensions(quarterWidth, quarterHeight)
68 cam4.SetDimensions(quarterWidth, quarterHeight)
69 cam1Pos, _ := cam1.Positions()
70 cam1Pos.X = 0
71 cam1Pos.Y = 0
72 cam2Pos, cam2ScenePos := cam2.Positions()
73 cam2Pos.X = float64(quarterWidth)
74 cam2Pos.Y = 0
75 cam2ScenePos.Y = 240
76 cam3Pos, cam3ScenePos := cam3.Positions()
77 cam3Pos.X = 0
78 cam3Pos.Y = float64(quarterHeight)
79 cam3ScenePos.Y = 160
80 cam4Pos, cam4ScenePos := cam4.Positions()
81 cam4Pos.X = float64(quarterWidth)
82 cam4Pos.Y = float64(quarterHeight)
83 cam4ScenePos.Y = 80
84 if err := client.Start(); err != nil {
85 log.Fatal(err)
86 }
87}
88
89func exampleScenePlan(height, width int, sto warehouse.Storage) error {
90 err := blueprint.NewParallaxBackgroundBuilder(sto).
91 AddLayer("sky.png", 0.1, 0.1).
92 AddLayer("far.png", 0.3, 0.3).
93 AddLayer("mid.png", 0.4, 0.4).
94 AddLayer("near.png", 0.8, 0.8).
95 Build()
96 if err != nil {
97 return err
98 }
99 return nil
100}
101
102type cameraMovementSystem struct {
103 flipX bool
104}
105
106func (sys *cameraMovementSystem) Run(cli coldbrew.LocalClient, scene coldbrew.Scene) error {
107 cameras := cli.ActiveCamerasFor(scene)
108 for _, cam := range cameras {
109 _, cameraPositionInScene := cam.Positions()
110 if cameraPositionInScene.X > 640 {
111 sys.flipX = true
112 } else if cameraPositionInScene.X < 0 {
113 sys.flipX = false
114 }
115
116 if !sys.flipX {
117 cameraPositionInScene.X += 1
118 } else {
119 cameraPositionInScene.X -= 1
120 }
121 }
122 return nil
123}