2020-06-11 20:42:59 +01:00
|
|
|
package atlas
|
2020-06-07 18:08:34 +01:00
|
|
|
|
2020-06-07 18:33:44 +01:00
|
|
|
import (
|
2020-07-19 11:50:19 +01:00
|
|
|
"log"
|
|
|
|
|
2020-07-10 18:22:59 +01:00
|
|
|
"github.com/mdiluz/rove/pkg/maths"
|
2020-07-19 12:26:57 +01:00
|
|
|
"github.com/mdiluz/rove/proto/roveapi"
|
2020-06-07 18:33:44 +01:00
|
|
|
)
|
2020-06-07 18:08:34 +01:00
|
|
|
|
2020-07-19 12:26:57 +01:00
|
|
|
// TileGlyph returns the glyph for this tile type
|
|
|
|
func TileGlyph(t roveapi.Tile) Glyph {
|
2020-07-19 11:50:19 +01:00
|
|
|
switch t {
|
2020-07-19 12:26:57 +01:00
|
|
|
case roveapi.Tile_TileNone:
|
2020-07-19 11:50:19 +01:00
|
|
|
return GlyphNone
|
2020-07-19 12:26:57 +01:00
|
|
|
case roveapi.Tile_Rock:
|
2020-07-19 11:56:05 +01:00
|
|
|
return GlyphGroundRock
|
2020-07-19 12:26:57 +01:00
|
|
|
case roveapi.Tile_Gravel:
|
2020-07-19 11:56:05 +01:00
|
|
|
return GlyphGroundGravel
|
2020-07-19 12:26:57 +01:00
|
|
|
case roveapi.Tile_Sand:
|
2020-07-19 11:56:05 +01:00
|
|
|
return GlyphGroundSand
|
2020-07-19 11:50:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
log.Fatalf("Unknown tile type: %c", t)
|
|
|
|
return GlyphNone
|
|
|
|
}
|
|
|
|
|
2020-07-10 16:52:00 +01:00
|
|
|
// Atlas represents a 2D world atlas of tiles and objects
|
|
|
|
type Atlas interface {
|
|
|
|
// SetTile sets a location on the Atlas to a type of tile
|
2020-07-19 12:26:57 +01:00
|
|
|
SetTile(v maths.Vector, tile roveapi.Tile)
|
2020-07-10 16:52:00 +01:00
|
|
|
|
|
|
|
// SetObject will set a location on the Atlas to contain an object
|
2020-07-10 18:39:33 +01:00
|
|
|
SetObject(v maths.Vector, obj Object)
|
2020-07-10 16:52:00 +01:00
|
|
|
|
|
|
|
// QueryPosition queries a position on the atlas
|
2020-07-19 12:26:57 +01:00
|
|
|
QueryPosition(v maths.Vector) (roveapi.Tile, Object)
|
2020-07-10 16:52:00 +01:00
|
|
|
}
|