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
28 client.SetTitle("Rendering Parallax Background")
29
30 err := client.RegisterScene(
31 "Example Scene",
32 640,
33 360,
34 exampleScenePlan,
35 []coldbrew.RenderSystem{},
36 []coldbrew.ClientSystem{
37 &coldbrew_clientsystems.BackgroundScrollSystem{},
38 &cameraMovementSystem{},
39 },
40 []blueprint.CoreSystem{},
41 )
42 if err != nil {
43 log.Fatal(err)
44 }
45
46 client.RegisterGlobalRenderSystem(coldbrew_rendersystems.GlobalRenderer{})
47
48 client.ActivateCamera()
49
50 if err := client.Start(); err != nil {
51 log.Fatal(err)
52 }
53}
54
55func exampleScenePlan(height, width int, sto warehouse.Storage) error {
56 // Use 0.0 and a single layer if you want a still background
57 err := blueprint.NewParallaxBackgroundBuilder(sto).
58 AddLayer("sky.png", 0.1, 0.1).
59 AddLayer("far.png", 0.3, 0.3).
60 AddLayer("mid.png", 0.4, 0.4).
61 AddLayer("near.png", 0.8, 0.8).
62 Build()
63 if err != nil {
64 return err
65 }
66 return nil
67}
68
69type cameraMovementSystem struct {
70 flipX bool
71 flipY bool
72}
73
74func (sys *cameraMovementSystem) Run(cli coldbrew.LocalClient, scene coldbrew.Scene) error {
75 cam := cli.ActiveCamerasFor(scene)[0]
76 _, cameraPositionInScene := cam.Positions()
77
78 if cameraPositionInScene.X > 640 {
79 sys.flipX = true
80 } else if cameraPositionInScene.X < 0 {
81 sys.flipX = false
82 }
83
84 if cameraPositionInScene.Y > 100 {
85 sys.flipY = true
86 } else if cameraPositionInScene.Y < 0 {
87 sys.flipY = false
88 }
89
90 if !sys.flipX {
91 cameraPositionInScene.X += 2
92 } else {
93 cameraPositionInScene.X -= 2
94 }
95
96 if !sys.flipY {
97 cameraPositionInScene.Y += 2
98 } else {
99 cameraPositionInScene.Y -= 2
100 }
101
102 return nil
103}