Title here
Summary here
Instructions
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 "github.com/TheBitDrifter/bappa/tteokbokki/spatial"
12
13 "github.com/TheBitDrifter/bappa/warehouse"
14 "github.com/hajimehoshi/ebiten/v2"
15 "github.com/hajimehoshi/ebiten/v2/inpututil"
16
17 "github.com/TheBitDrifter/bappa/blueprint/client"
18 "github.com/TheBitDrifter/bappa/blueprint/input"
19)
20
21//go:embed assets/*
22var assets embed.FS
23
24const (
25 sceneOneName = "s1"
26 sceneTwoName = "s2"
27)
28
29func main() {
30 client := coldbrew.NewClient(
31 640,
32 360,
33 10,
34 10,
35 10,
36 assets,
37 )
38
39 client.SetTitle("Scene Change Example")
40 client.SetMinimumLoadTime(20)
41
42 err := client.RegisterScene(
43 sceneOneName,
44 640,
45 360,
46 sceneOnePlan,
47 []coldbrew.RenderSystem{},
48 []coldbrew.ClientSystem{},
49 []blueprint.CoreSystem{},
50 )
51 if err != nil {
52 log.Fatal(err)
53 }
54 err = client.RegisterScene(
55 sceneTwoName,
56 640,
57 360,
58 sceneTwoPlan,
59 []coldbrew.RenderSystem{},
60 []coldbrew.ClientSystem{},
61 []blueprint.CoreSystem{},
62 )
63 if err != nil {
64 log.Fatal(err)
65 }
66
67 client.RegisterGlobalRenderSystem(coldbrew_rendersystems.GlobalRenderer{})
68 client.RegisterGlobalClientSystem(basicTransferSystem{}, &coldbrew_clientsystems.CameraSceneAssignerSystem{})
69
70 client.ActivateCamera()
71
72 if err := client.Start(); err != nil {
73 log.Fatal(err)
74 }
75}
76
77func sceneOnePlan(height, width int, sto warehouse.Storage) error {
78 spriteArchetype, err := sto.NewOrExistingArchetype(
79 spatial.Components.Position,
80 client.Components.SpriteBundle,
81 client.Components.CameraIndex,
82 )
83 if err != nil {
84 return err
85 }
86
87 err = spriteArchetype.Generate(1,
88 input.Components.InputBuffer,
89
90 spatial.NewPosition(255, 20),
91 client.NewSpriteBundle().
92 AddSprite("sprite.png", true),
93
94 client.CameraIndex(0),
95 )
96 err = blueprint.NewParallaxBackgroundBuilder(sto).
97 AddLayer("sky.png", 0.1, 0.1).
98 AddLayer("far.png", 0.3, 0.3).
99 AddLayer("mid.png", 0.4, 0.4).
100 AddLayer("near.png", 0.8, 0.8).
101 Build()
102 if err != nil {
103 return err
104 }
105 return nil
106}
107
108func sceneTwoPlan(height, width int, sto warehouse.Storage) error {
109 err := blueprint.NewParallaxBackgroundBuilder(sto).
110 AddLayer("sky.png", 0.1, 0.1).
111 Build()
112 if err != nil {
113 return err
114 }
115 return nil
116}
117
118type transfer struct {
119 targetSceneName string
120 playerEntity warehouse.Entity
121}
122
123type basicTransferSystem struct{}
124
125func (basicTransferSystem) Run(cli coldbrew.Client) error {
126 var pending []transfer
127
128 for activeScene := range cli.ActiveScenes() {
129 if !activeScene.Ready() {
130 continue
131 }
132 cursor := activeScene.NewCursor(blueprint.Queries.CameraIndex)
133 for range cursor.Next() {
134 if inpututil.IsKeyJustPressed(ebiten.Key1) {
135
136 currentPlayerEntity, err := cursor.CurrentEntity()
137 if err != nil {
138 return err
139 }
140
141 // --- Determine target scene ---
142 // Simple toggle between scenes
143 var sceneTargetName string
144 if activeScene.Name() == sceneOneName {
145 sceneTargetName = sceneTwoName
146 } else {
147 sceneTargetName = sceneOneName
148 }
149
150 transfer := transfer{
151 targetSceneName: sceneTargetName,
152 playerEntity: currentPlayerEntity,
153 }
154 pending = append(pending, transfer)
155 }
156 }
157 }
158
159 for _, transfer := range pending {
160 cli.ChangeSceneByName(transfer.targetSceneName, transfer.playerEntity)
161 // Note:
162 // Use cli.ActivateSceneByName() if doing multi scene setups!
163 }
164
165 return nil
166}