Title here
Summary here
Instructions
1
2package main
3
4import (
5 "embed"
6 "log"
7
8 "github.com/TheBitDrifter/bappa/blueprint"
9 "github.com/TheBitDrifter/bappa/blueprint/client"
10 "github.com/TheBitDrifter/bappa/blueprint/input"
11 "github.com/TheBitDrifter/bappa/coldbrew"
12 "github.com/TheBitDrifter/bappa/coldbrew/coldbrew_clientsystems"
13 "github.com/TheBitDrifter/bappa/coldbrew/coldbrew_rendersystems"
14 "github.com/TheBitDrifter/bappa/tteokbokki/spatial"
15
16 "github.com/TheBitDrifter/bappa/warehouse"
17 "github.com/hajimehoshi/ebiten/v2"
18)
19
20//go:embed assets/*
21var assets embed.FS
22
23var actions = struct {
24 Up, Down, Left, Right input.Action
25}{
26 Up: input.NewAction(),
27 Down: input.NewAction(),
28 Left: input.NewAction(),
29 Right: input.NewAction(),
30}
31
32func main() {
33 client := coldbrew.NewClient(
34 640,
35 360,
36 10,
37 10,
38 10,
39 assets,
40 )
41
42 client.SetTitle("Capturing Keyboard Inputs")
43
44 err := client.RegisterScene(
45 "Example Scene",
46 640,
47 360,
48 exampleScenePlan,
49 []coldbrew.RenderSystem{},
50 []coldbrew.ClientSystem{},
51 []blueprint.CoreSystem{
52 inputSystem{},
53 },
54 )
55 if err != nil {
56 log.Fatal(err)
57 }
58
59 client.RegisterGlobalRenderSystem(coldbrew_rendersystems.GlobalRenderer{})
60 client.RegisterGlobalClientSystem(coldbrew_clientsystems.ActionBufferSystem{})
61 client.ActivateCamera()
62
63 receiver, _ := client.ActivateReceiver()
64
65 receiver.RegisterKey(ebiten.KeyUp, actions.Up)
66 receiver.RegisterKey(ebiten.KeyW, actions.Up)
67
68 receiver.RegisterKey(ebiten.KeyDown, actions.Down)
69 receiver.RegisterKey(ebiten.KeyS, actions.Down)
70
71 receiver.RegisterKey(ebiten.KeyLeft, actions.Left)
72 receiver.RegisterKey(ebiten.KeyA, actions.Left)
73
74 receiver.RegisterKey(ebiten.KeyRight, actions.Right)
75 receiver.RegisterKey(ebiten.KeyD, actions.Right)
76
77 if err := client.Start(); err != nil {
78 log.Fatal(err)
79 }
80}
81
82func exampleScenePlan(width, height int, sto warehouse.Storage) error {
83 spriteArchetype, err := sto.NewOrExistingArchetype(
84 input.Components.ActionBuffer,
85 spatial.Components.Position,
86 client.Components.SpriteBundle,
87 )
88 if err != nil {
89 return err
90 }
91
92 err = spriteArchetype.Generate(1,
93 input.Components.ActionBuffer,
94
95 spatial.NewPosition(255, 20),
96 client.NewSpriteBundle().
97 AddSprite("images/sprite.png", true),
98 )
99 if err != nil {
100 return err
101 }
102 return nil
103}
104
105type inputSystem struct{}
106
107func (inputSystem) Run(scene blueprint.Scene, _ float64) error {
108 query := warehouse.Factory.NewQuery().
109 And(input.Components.ActionBuffer, spatial.Components.Position)
110
111 cursor := scene.NewCursor(query)
112
113 for range cursor.Next() {
114 pos := spatial.Components.Position.GetFromCursor(cursor)
115 actionBuffer := input.Components.ActionBuffer.GetFromCursor(cursor)
116
117 if stampedAction, ok := actionBuffer.ConsumeAction(actions.Up); ok {
118 log.Println("Tick", stampedAction.Tick)
119 pos.Y -= 2
120 }
121 if stampedAction, ok := actionBuffer.ConsumeAction(actions.Down); ok {
122 log.Println("Tick", stampedAction.Tick)
123 pos.Y += 2
124 }
125 if stampedAction, ok := actionBuffer.ConsumeAction(actions.Left); ok {
126 log.Println("Tick", stampedAction.Tick)
127 pos.X -= 2
128 }
129 if stampedAction, ok := actionBuffer.ConsumeAction(actions.Right); ok {
130 log.Println("Tick", stampedAction.Tick)
131 pos.X += 2
132 }
133
134 }
135 return nil
136}