"they-gone/assets"
)
-const mapSize = 100
-
-type Tile uint8
+const mapSize int = 100
type App struct {
Camera rl.Camera2D
- Entities []Entity
-}
-
-func moveVector() rl.Vector2 {
- var vector rl.Vector2
-
- if rl.IsKeyDown(rl.KeyA) { vector.X -= 1 }
- if rl.IsKeyDown(rl.KeyD) { vector.X += 1 }
-
- if rl.IsKeyDown(rl.KeyW) { vector.Y -= 1 }
- if rl.IsKeyDown(rl.KeyS) { vector.Y += 1 }
+ Entities BoundedArray[Entity]
- return vector
+ BackgroundTiles [mapSize * mapSize]Tile
+ MiddlegroundTiles [mapSize * mapSize]Tile
+ ForegroundTiles [mapSize * mapSize]Tile
}
func main() {
const windowWidth int = 800
const windowHeight int = 600
- const playerSpeed float32 = 3
+ const playerSpeed float32 = 5
- rl.InitWindow(int32(windowWidth), int32(windowHeight), "They left.")
+ rl.InitWindow(int32(windowWidth), int32(windowHeight), "They gone.")
defer rl.CloseWindow()
rl.SetTargetFPS(30)
playerImage := rl.LoadImageFromMemory(".png", assets.Player, int32(len(assets.Player)))
+ tilesImage := rl.LoadImageFromMemory(".png", assets.Tiles, int32(len(assets.Tiles)))
playerTexture := rl.LoadTextureFromImage(playerImage)
defer rl.UnloadTexture(playerTexture)
+ tilesTexture := rl.LoadTextureFromImage(tilesImage)
+ defer rl.UnloadTexture(tilesTexture)
+
rl.UnloadImage(playerImage)
+ rl.UnloadImage(tilesImage)
- playerSize := rl.Vector2{ 300, 300 }
+ playerSize := rl.Vector2{ 48, 104 }
app := App{
Camera: rl.Camera2D{
- Offset: rl.Vector2{ float32(windowWidth) / 2, float32(windowHeight) - playerSize.Y / 2 },
+ Offset: rl.Vector2{ float32(windowWidth) / 2, (float32(windowHeight) + playerSize.Y) / 2 },
Zoom: 1,
},
- Entities: make([]Entity, 0),
+ }
+
+ for i := 0; i < mapSize * mapSize; i += 1 {
+ app.BackgroundTiles[i] = 1
}
{
player := NewEntity(playerTexture, rl.Vector2{}, playerSize)
- app.Entities = append(app.Entities, player)
+ _ = app.Entities.Append(player)
}
- player := &app.Entities[0]
+ player := &app.Entities.GetData()[0]
for !rl.WindowShouldClose() {
- moveVec := moveVector()
+ var moveVec rl.Vector2
+
+ if rl.IsKeyDown(rl.KeyA) { moveVec.X -= 1 }
+ if rl.IsKeyDown(rl.KeyD) { moveVec.X += 1 }
+
+ if rl.IsKeyDown(rl.KeyW) { moveVec.Y -= 1 }
+ if rl.IsKeyDown(rl.KeyS) { moveVec.Y += 1 }
+
+ moveVec = rl.Vector2Normalize(moveVec)
if moveVec.X > 0 { player.Flip = false }
if moveVec.X < 0 { player.Flip = true }
player.Position.X += playerSpeed * moveVec.X
player.Position.Y += playerSpeed * moveVec.Y
+ app.Camera.Target = player.Position
+
+ // TODO: Remove before release
+ app.Camera.Zoom += rl.GetMouseWheelMove() * 0.1
+
rl.BeginDrawing()
rl.ClearBackground(rl.Black)
{
rl.BeginMode2D(app.Camera)
- for _, entity := range app.Entities {
+ for i := 0; i < mapSize * mapSize; i += 1 {
+ x := i % mapSize
+ y := int(i / mapSize)
+
+ backgroundTile := app.BackgroundTiles[i]
+ middlegroundTile:= app.MiddlegroundTiles[i]
+
+ DrawTile(tilesTexture, backgroundTile, x, y)
+ DrawTile(tilesTexture, middlegroundTile, x, y)
+ }
+
+ for _, entity := range app.Entities.GetData() {
DrawEntity(entity)
}
--- /dev/null
+package main
+
+import rl "github.com/gen2brain/raylib-go/raylib"
+
+type Tile uint8
+
+const TileSize int = 32
+
+func DrawTile(tileMap rl.Texture2D, tile Tile, x int, y int) {
+ tileMapSize := int(tileMap.Width) / TileSize
+ scale := 2
+
+ srcRect := rl.Rectangle{
+ X: float32(int(tile) % tileMapSize * TileSize),
+ Y: float32(int(tile) / tileMapSize * TileSize),
+ Width: float32(TileSize),
+ Height: float32(TileSize),
+ }
+
+ dstRect := rl.Rectangle{
+ X: float32(x * TileSize * scale),
+ Y: float32(y * TileSize * scale),
+ Width: float32(TileSize * scale),
+ Height: float32(TileSize * scale),
+ }
+
+ origin := rl.Vector2{
+ X: float32(TileSize / 2),
+ Y: float32(TileSize / 2),
+ }
+
+ rl.DrawTexturePro(tileMap, srcRect, dstRect, origin, 0, rl.RayWhite)
+}