Skip to content

Latest commit

 

History

History
121 lines (100 loc) · 29.5 KB

README.md

File metadata and controls

121 lines (100 loc) · 29.5 KB

TaleSlab

GoDoc Go Report Card CI Lint Codecov Visits Badge

WARNING: this project is in "alpha", so it's in heavy development and there is no concerns with breaking changes at this development phase.

A map generator for the TaleSpire (rpg tabletop). This project support the creation of maps in different sizes, biomes and characteristics. The maps can be built using procedural algorithms or even with georeferencing data.

This project uses this other projects to do all the magic:

You can see the full documentation here with all maps and features.

Map Example

version_size

TaleSpire Code Example

```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```

Contributing

Command Description Dependencies
make build Build project go
make test Run unit tests go
make fmt Format files gofmt, gofumpt and goimports
make lint Check files golangci-lint and goreportcard-cli
make dod (Definition of Done) Format files and check files Same as make build, make test, make fmt and make lint
make install Install all dependencies go, curl and git
make examples Run all examples go

Go Code Example

package main

import (
	"context"
	"github.com/johnfercher/taleslab/pkg/procedural/proceduraldomain/proceduralentities"
	"github.com/johnfercher/taleslab/pkg/procedural/proceduralservices"
	"github.com/johnfercher/taleslab/pkg/shared/file"
	"github.com/johnfercher/taleslab/pkg/shared/grid"
	"github.com/johnfercher/taleslab/pkg/taleslab/taleslabdomain/taleslabentities"
	"log"

	"github.com/johnfercher/talescoder/pkg/encoder"
	"github.com/johnfercher/taleslab/pkg/taleslab/taleslabdomain/taleslabconsts/biometype"
	"github.com/johnfercher/taleslab/pkg/taleslab/taleslabrepositories"
	"github.com/johnfercher/taleslab/pkg/taleslab/taleslabservices"
)

func main() {
	ctx := context.TODO()

	encoder := encoder.NewEncoder()
	propRepository, _ := taleslabrepositories.NewPropRepository()
	biomeRepository, _ := taleslabrepositories.NewBiomeRepository()
	sliceGenerator := taleslabservices.NewSlabSliceGenerator(biomeRepository, propRepository)
	slabGenerator := taleslabservices.NewSlabGenerator(sliceGenerator)

	mapService := proceduralservices.NewMapService(slabGenerator, encoder)

	mapGeneration := &proceduralentities.MapGeneration{
		Biome: biometype.Beach,
		Ground: &proceduralentities.Ground{
			Width:             50,
			Length:            50,
			TerrainComplexity: 5,
			MinHeight:         5,
			ForceBaseLand:     true,
		},
		Props: &proceduralentities.Props{
			StoneDensity: 83,
			TreeDensity:  15,
		},
		Mountains: &proceduralentities.Mountains{
			MinX:           30,
			RandX:          5,
			MinY:           30,
			RandY:          5,
			MinComplexity:  5,
			RandComplexity: 2,
			MinHeight:      10,
			RandHeight:     10,
		},
		River: &grid.River{
			Start:              &taleslabentities.Vector3d{49, 49, 0},
			End:                &taleslabentities.Vector3d{0, 0, 0},
			HeightCutThreshold: 5,
		},
		Canyon: &proceduralentities.Canyon{
			HasCanyon:    true,
			CanyonOffset: 10,
		},
	}

	slab, err := mapService.Generate(ctx, mapGeneration)
	if err != nil {
		log.Fatal(err)
	}

	err = file.SaveCodes(slab.Codes, "cmd/procedurals/beach/data.txt")
	if err != nil {
		log.Fatal(err)
	}
}