Documentation
¶
Index ¶
- func ManhattanDistance(a, b Position) int
- func PackedBlobmapNumber(t, b, l, r, tl, tr, bl, br bool) uint8
- func PackedPipemapNumber(t, b, l, r bool) uint8
- func PackedRawEightNumber(t, b, l, r, tl, tr, bl, br bool) uint8
- func WangBlobmapNumber(t, b, l, r, tl, tr, bl, br bool) uint8
- type Chunk
- func (t *Chunk[T]) BoundsAt(pos TilePosition) (float64, float64, float64, float64)
- func (t *Chunk[T]) Get(pos TilePosition) (T, bool)
- func (t *Chunk[T]) GetEdgeNeighbors(x, y int) []TilePosition
- func (t *Chunk[T]) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []TilePosition
- func (t *Chunk[T]) Height() int
- func (t *Chunk[T]) PositionToTile(x, y float64) TilePosition
- func (t *Chunk[T]) Set(pos TilePosition, tile T) bool
- func (t *Chunk[T]) TileToPosition(tilePos TilePosition) (float64, float64)
- func (t *Chunk[T]) Tiles() [][]T
- func (t *Chunk[T]) Width() int
- type ChunkMath
- func (c *ChunkMath) ChunkToTile(chunkPos ChunkPosition) TilePosition
- func (c *ChunkMath) GetChunkEdgeNeighbors(pos ChunkPosition) []ChunkPosition
- func (c *ChunkMath) GetChunkTileRect(chunkPos ChunkPosition) Rect
- func (c *ChunkMath) GetEdgeNeighbors(x, y int) []TilePosition
- func (c *ChunkMath) GetNeighbors(pos TilePosition) []TilePosition
- func (t *ChunkMath) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []TilePosition
- func (t *ChunkMath) GetOverlappingTiles2(ret []TilePosition, x, y float64, radius float64) []TilePosition
- func (c *ChunkMath) PositionToChunk(x, y float64) ChunkPosition
- func (c *ChunkMath) PositionToTile(x, y float64) TilePosition
- func (c *ChunkMath) PositionToTile2(pos glm.Vec2) TilePosition
- func (c *ChunkMath) RectToWorldRect(r Rect) glm.Rect
- func (c *ChunkMath) TileToChunk(tilePos TilePosition) ChunkPosition
- func (c *ChunkMath) TileToChunkLocalPosition(tilePos Position) glm.Vec2
- func (c *ChunkMath) TileToPosition(tilePos TilePosition) glm.Vec2
- func (c *ChunkMath) ToPosition(chunkPos ChunkPosition) glm.Vec2
- func (c *ChunkMath) WorldToTileRect(r glm.Rect) Rect
- type ChunkPosition
- type Chunkmap
- func (c *Chunkmap[T]) AddChunk(chunkPos ChunkPosition, tiles [][]T) *Chunk[T]
- func (c *Chunkmap[T]) AddTile(pos TilePosition, tile T)
- func (c *Chunkmap[T]) Bounds() Rect
- func (c *Chunkmap[T]) BreadthFirstSearch(tilePos TilePosition, valid func(t T) bool) []TilePosition
- func (c *Chunkmap[T]) CalculateBlobmapVariant(pos TilePosition, same func(a T, b T) bool) uint8
- func (c *Chunkmap[T]) CalculatePipemapVariant(pos TilePosition, same func(a T, b T) bool) uint8
- func (c *Chunkmap[T]) CalculateRawEightVariant(pos TilePosition, same func(a T, b T) bool) uint8
- func (c *Chunkmap[T]) GenerateChunk(chunkPos ChunkPosition, expansionLambda func(x, y int) T) *Chunk[T]
- func (c *Chunkmap[T]) GetAllChunkPositions() []ChunkPosition
- func (c *Chunkmap[T]) GetAllChunks() []*Chunk[T]
- func (c *Chunkmap[T]) GetChunk(chunkPos ChunkPosition) (*Chunk[T], bool)
- func (c *Chunkmap[T]) GetEightNeighbors(pos TilePosition) (T, T, T, T, T, T, T, T)
- func (c *Chunkmap[T]) GetNeighborsAtDistance(tilePos TilePosition, dist int) []TilePosition
- func (c *Chunkmap[T]) GetPerimeter() map[ChunkPosition]bool
- func (c *Chunkmap[T]) GetTile(pos TilePosition) (T, bool)
- func (c *Chunkmap[T]) IterBreadthFirst(tilePos TilePosition, valid func(t T) bool) iter.Seq[Position]
- func (c *Chunkmap[T]) NumChunks() int
- func (c *Chunkmap[T]) SetTile(pos TilePosition, tile T) bool
- type FlatRectMath
- type Math
- type PointyRectMath
- type Position
- type Rect
- func (r Rect) Area() int
- func (r Rect) Center() Position
- func (r Rect) Contains(pos Position) bool
- func (r Rect) H() int
- func (r Rect) Intersects(r2 Rect) bool
- func (r Rect) Iter() iter.Seq[Position]
- func (r Rect) Moved(v Position) Rect
- func (r Rect) Norm() Rect
- func (r Rect) PadAll(pad int) Rect
- func (r Rect) Union(s Rect) Rect
- func (r Rect) UnpadAll(pad int) Rect
- func (r Rect) W() int
- func (r Rect) WithCenter(v Position) Rect
- type TilePosition
- type Tilemap
- func (t *Tilemap[T]) BoundsAt(pos Position) (float64, float64, float64, float64)
- func (t *Tilemap[T]) GetEdgeNeighbors(x, y int) []Position
- func (t *Tilemap[T]) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []Position
- func (t *Tilemap[T]) GetTile(pos Position) (T, bool)
- func (t *Tilemap[T]) Height() int
- func (t *Tilemap[T]) PositionToTile(x, y float64) Position
- func (t *Tilemap[T]) SetTile(pos Position, tile T) bool
- func (t *Tilemap[T]) TileToPosition(tilePos Position) (float64, float64)
- func (t *Tilemap[T]) Tiles() [][]T
- func (t *Tilemap[T]) Width() int
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ManhattanDistance ¶
func PackedBlobmapNumber ¶
Follows the tile numbering that godot uses. Numbered in reading order, starting at 0. Godot: https://docs.godotengine.org/en/stable/tutorials/2d/using_tilemaps.html
func PackedPipemapNumber ¶
Same thing as blobmap but only includes the edge neighbors (and not corners)
func PackedRawEightNumber ¶
func WangBlobmapNumber ¶
This function computes the wang tilenumber of a tile based on the tiles around it
Types ¶
type Chunk ¶
type Chunk[T any] struct { TileSize [2]int // In pixels Offset glm.Vec2 // In world space positioning TileOffset Position // contains filtered or unexported fields }
func (*Chunk[T]) Get ¶
func (t *Chunk[T]) Get(pos TilePosition) (T, bool)
func (*Chunk[T]) GetEdgeNeighbors ¶
func (t *Chunk[T]) GetEdgeNeighbors(x, y int) []TilePosition
func (*Chunk[T]) GetOverlappingTiles ¶
func (t *Chunk[T]) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []TilePosition
Returns a list of tiles that are overlapping the collider at a position
func (*Chunk[T]) PositionToTile ¶
func (t *Chunk[T]) PositionToTile(x, y float64) TilePosition
func (*Chunk[T]) Set ¶
func (t *Chunk[T]) Set(pos TilePosition, tile T) bool
func (*Chunk[T]) TileToPosition ¶
func (t *Chunk[T]) TileToPosition(tilePos TilePosition) (float64, float64)
type ChunkMath ¶
type ChunkMath struct {
// contains filtered or unexported fields
}
func NewChunkmath ¶
func (*ChunkMath) ChunkToTile ¶
func (c *ChunkMath) ChunkToTile(chunkPos ChunkPosition) TilePosition
Returns the center tile of a chunk
func (*ChunkMath) GetChunkEdgeNeighbors ¶
func (c *ChunkMath) GetChunkEdgeNeighbors(pos ChunkPosition) []ChunkPosition
func (*ChunkMath) GetChunkTileRect ¶
func (c *ChunkMath) GetChunkTileRect(chunkPos ChunkPosition) Rect
func (*ChunkMath) GetEdgeNeighbors ¶
func (c *ChunkMath) GetEdgeNeighbors(x, y int) []TilePosition
func (*ChunkMath) GetNeighbors ¶
func (c *ChunkMath) GetNeighbors(pos TilePosition) []TilePosition
func (*ChunkMath) GetOverlappingTiles ¶
func (t *ChunkMath) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []TilePosition
Returns a list of tiles that are overlapping the collider at a position
func (*ChunkMath) GetOverlappingTiles2 ¶
func (t *ChunkMath) GetOverlappingTiles2(ret []TilePosition, x, y float64, radius float64) []TilePosition
func (*ChunkMath) PositionToChunk ¶
func (c *ChunkMath) PositionToChunk(x, y float64) ChunkPosition
func (*ChunkMath) PositionToTile ¶
func (c *ChunkMath) PositionToTile(x, y float64) TilePosition
func (*ChunkMath) PositionToTile2 ¶
func (c *ChunkMath) PositionToTile2(pos glm.Vec2) TilePosition
func (*ChunkMath) RectToWorldRect ¶
Returns a rect including all of the tiles. Centered on edge tiles
func (*ChunkMath) TileToChunk ¶
func (c *ChunkMath) TileToChunk(tilePos TilePosition) ChunkPosition
func (*ChunkMath) TileToChunkLocalPosition ¶
Note: untested
func (*ChunkMath) TileToPosition ¶
func (c *ChunkMath) TileToPosition(tilePos TilePosition) glm.Vec2
func (*ChunkMath) ToPosition ¶
func (c *ChunkMath) ToPosition(chunkPos ChunkPosition) glm.Vec2
Returns the worldspace position of a chunk
type ChunkPosition ¶
type ChunkPosition struct {
X, Y int16
}
type Chunkmap ¶
func NewChunkmap ¶
func (*Chunkmap[T]) AddChunk ¶
func (c *Chunkmap[T]) AddChunk(chunkPos ChunkPosition, tiles [][]T) *Chunk[T]
func (*Chunkmap[T]) AddTile ¶
func (c *Chunkmap[T]) AddTile(pos TilePosition, tile T)
Adds a tile at the position, if the chunk doesnt exist, then it will be created
func (*Chunkmap[T]) BreadthFirstSearch ¶
func (c *Chunkmap[T]) BreadthFirstSearch(tilePos TilePosition, valid func(t T) bool) []TilePosition
func (*Chunkmap[T]) CalculateBlobmapVariant ¶
func (c *Chunkmap[T]) CalculateBlobmapVariant(pos TilePosition, same func(a T, b T) bool) uint8
func (*Chunkmap[T]) CalculatePipemapVariant ¶
func (c *Chunkmap[T]) CalculatePipemapVariant(pos TilePosition, same func(a T, b T) bool) uint8
func (*Chunkmap[T]) CalculateRawEightVariant ¶
func (c *Chunkmap[T]) CalculateRawEightVariant(pos TilePosition, same func(a T, b T) bool) uint8
func (*Chunkmap[T]) GenerateChunk ¶
func (c *Chunkmap[T]) GenerateChunk(chunkPos ChunkPosition, expansionLambda func(x, y int) T) *Chunk[T]
This generates a chunk based on the passed in expansionLambda
func (*Chunkmap[T]) GetAllChunkPositions ¶
func (c *Chunkmap[T]) GetAllChunkPositions() []ChunkPosition
func (*Chunkmap[T]) GetAllChunks ¶
TODO - It might be cool to have a function which returns a rectangle of chunks as a list (To automatically cull out sections we don't want)
func (*Chunkmap[T]) GetChunk ¶
func (c *Chunkmap[T]) GetChunk(chunkPos ChunkPosition) (*Chunk[T], bool)
func (*Chunkmap[T]) GetEightNeighbors ¶
func (c *Chunkmap[T]) GetEightNeighbors(pos TilePosition) (T, T, T, T, T, T, T, T)
func (*Chunkmap[T]) GetNeighborsAtDistance ¶
func (c *Chunkmap[T]) GetNeighborsAtDistance(tilePos TilePosition, dist int) []TilePosition
func (*Chunkmap[T]) GetPerimeter ¶
func (c *Chunkmap[T]) GetPerimeter() map[ChunkPosition]bool
func (*Chunkmap[T]) GetTile ¶
func (c *Chunkmap[T]) GetTile(pos TilePosition) (T, bool)
func (*Chunkmap[T]) IterBreadthFirst ¶
func (*Chunkmap[T]) SetTile ¶
func (c *Chunkmap[T]) SetTile(pos TilePosition, tile T) bool
Tries to set the tile, returns false if the chunk does not exist
type FlatRectMath ¶
type FlatRectMath struct {
// contains filtered or unexported fields
}
func NewFlatRectMath ¶
func NewFlatRectMath(size [2]int) FlatRectMath
func (FlatRectMath) PositionToTile ¶
func (m FlatRectMath) PositionToTile(x, y float64) (int, int)
type PointyRectMath ¶
type PointyRectMath struct{}
func (PointyRectMath) Position ¶
func (t PointyRectMath) Position(x, y int, size [2]int) (float64, float64)
func (PointyRectMath) PositionToTile ¶
func (t PointyRectMath) PositionToTile(x, y float64, size [2]int) (int, int)
type Rect ¶
type Rect struct {
Min, Max Position
}
func (Rect) Intersects ¶
func (Rect) WithCenter ¶
type TilePosition ¶
type TilePosition = Position
type Tilemap ¶
type Tilemap[T any] struct { TileSize [2]int // In pixels Offset glm.Vec2 // In world space positioning // contains filtered or unexported fields }
func (*Tilemap[T]) GetEdgeNeighbors ¶
func (*Tilemap[T]) GetOverlappingTiles ¶
func (t *Tilemap[T]) GetOverlappingTiles(x, y float64, collider *phy2.CircleCollider) []Position
Returns a list of tiles that are overlapping the collider at a position