/
endpoints.go
57 lines (48 loc) · 1.15 KB
/
endpoints.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package dungeon
import (
"net/http"
"math/rand"
"github.com/Aorioli/procedural/endpoints"
"github.com/go-kit/kit/endpoint"
"github.com/meshiest/go-dungeon/dungeon"
"github.com/pkg/errors"
"golang.org/x/net/context"
)
// generateRequest struct
type generateRequest struct {
Size int
Rooms int
Seed int64
}
func makeGenerateEndpoint() endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (interface{}, error) {
if req, ok := request.(error); ok {
return req, nil
}
req, ok := request.(*generateRequest)
if !ok {
return endpoints.Err(
errors.New("Invalid generate request"),
http.StatusInternalServerError,
), nil
}
grid := make([][]int, req.Size)
for i := 0; i < req.Size; i++ {
grid[i] = make([]int, req.Size)
}
dngn := &dungeon.Dungeon{
Size: req.Size,
NumRooms: req.Rooms,
Grid: grid,
NumTries: 30,
MinSize: 3,
MaxSize: 12,
Rooms: []dungeon.Rectangle{},
Regions: []int{},
Bounds: dungeon.Rectangle{X: 1, Y: 1, Width: req.Size - 2, Height: req.Size - 2},
Rand: rand.New(rand.NewSource(req.Seed)),
}
dngn.Generate()
return *dngn, nil
}
}