ichigo/main.go

163 lines
6 KiB
Go
Raw Normal View History

2021-07-23 13:12:54 +10:00
package main
import (
2021-07-25 14:15:39 +10:00
"embed"
2021-08-03 18:26:14 +10:00
"image"
"image/color"
2021-07-25 14:15:39 +10:00
_ "image/png"
2021-07-23 13:12:54 +10:00
"log"
"drjosh.dev/gurgle/engine"
2021-08-05 12:26:41 +10:00
"drjosh.dev/gurgle/game"
2021-07-23 13:12:54 +10:00
"github.com/hajimehoshi/ebiten/v2"
)
const screenWidth, screenHeight = 320, 240
2021-07-26 21:19:12 +10:00
//go:embed assets
2021-07-25 14:15:39 +10:00
var assets embed.FS
2021-07-23 13:12:54 +10:00
func main() {
ebiten.SetWindowSize(screenWidth*2, screenHeight*2)
2021-07-25 14:15:39 +10:00
ebiten.SetWindowTitle("TODO")
2021-07-31 16:38:54 +10:00
engine.AssetFS = assets
2021-08-01 14:41:25 +10:00
engine.AnimDefs = map[string]*engine.AnimDef{
2021-07-31 21:23:58 +10:00
"green_tiles": {
Frames: []engine.AnimFrame{
{Frame: 0, Duration: 16},
{Frame: 1, Duration: 16},
{Frame: 2, Duration: 16},
},
},
"red_tiles": {
Frames: []engine.AnimFrame{
{Frame: 3, Duration: 12},
{Frame: 4, Duration: 12},
{Frame: 5, Duration: 12},
{Frame: 6, Duration: 12},
},
},
2021-08-05 10:50:13 +10:00
"aw_idle_right": {
2021-08-04 17:19:17 +10:00
Frames: []engine.AnimFrame{
{Frame: 0, Duration: 60},
},
},
2021-08-05 10:50:13 +10:00
"aw_idle_left": {
Frames: []engine.AnimFrame{
{Frame: 1, Duration: 60},
},
},
2021-08-04 17:19:17 +10:00
"aw_walk_right": {
Frames: []engine.AnimFrame{
{Frame: 2, Duration: 6},
{Frame: 3, Duration: 6},
{Frame: 4, Duration: 6},
2021-08-05 10:50:13 +10:00
{Frame: 5, Duration: 6},
2021-08-04 17:19:17 +10:00
},
},
"aw_walk_left": {
Frames: []engine.AnimFrame{
{Frame: 6, Duration: 6},
{Frame: 7, Duration: 6},
{Frame: 8, Duration: 6},
2021-08-05 10:50:13 +10:00
{Frame: 9, Duration: 3},
2021-08-04 17:19:17 +10:00
},
},
"aw_run_right": {
Frames: []engine.AnimFrame{
{Frame: 10, Duration: 3},
{Frame: 11, Duration: 3},
{Frame: 12, Duration: 3},
2021-08-05 10:50:13 +10:00
{Frame: 13, Duration: 3},
},
},
"aw_run_left": {
Frames: []engine.AnimFrame{
{Frame: 14, Duration: 3},
{Frame: 15, Duration: 3},
{Frame: 16, Duration: 3},
2021-08-05 10:50:13 +10:00
{Frame: 17, Duration: 3},
},
},
2021-07-31 21:23:58 +10:00
}
2021-07-25 15:03:10 +10:00
2021-08-03 16:17:59 +10:00
tiles := [][]engine.Tile{
{engine.StaticTile(9), nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, engine.StaticTile(9)},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "green_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "green_tiles"}}, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "green_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "green_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
{nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil},
2021-08-03 16:43:38 +10:00
{engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8), engine.StaticTile(8)},
{engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "red_tiles"}}, engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), &engine.AnimatedTile{AnimRef: engine.AnimRef{Key: "green_tiles"}}, engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7)},
{engine.StaticTile(9), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(7), engine.StaticTile(9)},
2021-08-02 15:56:25 +10:00
}
2021-07-29 15:29:26 +10:00
2021-08-03 20:06:17 +10:00
level1 := &engine.Scene{
ID: "level_1",
Components: []interface{}{
engine.Fill{
Color: color.White,
},
2021-08-03 20:06:17 +10:00
&engine.Tilemap{
ID: "terrain",
Map: tiles,
Src: engine.ImageRef{Path: "assets/boxes.png"},
TileSize: 16,
ZPos: 0,
},
&engine.SolidRect{
ID: "ceiling",
Rect: image.Rect(0, -1, 320, 0),
},
&engine.SolidRect{
ID: "left_wall",
Rect: image.Rect(-1, 0, 0, 240),
},
&engine.SolidRect{
ID: "right_wall",
Rect: image.Rect(320, 0, 321, 240),
},
2021-08-05 12:26:41 +10:00
&game.Awakeman{
Sprite: engine.Sprite{
ID: "awakeman",
Actor: engine.Actor{
CollisionDomain: "level_1",
Pos: image.Pt(100, 100),
Size: image.Pt(10, 16),
},
Src: engine.ImageRef{Path: "assets/aw.png"},
ZPos: 1,
2021-08-04 15:07:57 +10:00
},
2021-08-03 20:06:17 +10:00
},
},
}
2021-07-25 15:03:10 +10:00
game := &engine.Game{
2021-07-23 13:12:54 +10:00
ScreenHeight: screenHeight,
ScreenWidth: screenWidth,
2021-07-30 14:25:32 +10:00
Scene: &engine.Scene{
2021-08-02 12:16:10 +10:00
ID: "root",
2021-07-30 16:11:01 +10:00
Components: []interface{}{
2021-08-01 16:41:10 +10:00
&engine.GobDumper{
2021-08-01 20:38:27 +10:00
KeyCombo: []ebiten.Key{ebiten.KeyControl, ebiten.KeyD},
2021-08-01 16:41:10 +10:00
},
2021-08-03 20:06:17 +10:00
level1,
2021-07-30 16:11:01 +10:00
engine.PerfDisplay{},
},
2021-07-23 13:12:54 +10:00
},
2021-07-25 15:03:10 +10:00
}
2021-08-05 12:26:41 +10:00
game.PrepareToRun()
2021-07-25 15:03:10 +10:00
if err := ebiten.RunGame(game); err != nil {
2021-07-23 14:59:49 +10:00
log.Fatalf("Game error: %v", err)
2021-07-23 13:12:54 +10:00
}
}