From 6c78a639f557ee2405d499360508ab4ee6159448 Mon Sep 17 00:00:00 2001 From: Trevor Slocum Date: Mon, 5 Aug 2024 17:28:15 -0700 Subject: [PATCH] Initial commit --- .../0001-game-dev-fundamentals.odp | Bin 0 -> 21652 bytes 0001-game-dev-fundamentals/go.mod | 3 +++ 0001-game-dev-fundamentals/main.go | 7 ++++++ 0002-getting-started-with-ebitengine/game.go | 22 ++++++++++++++++++ 0002-getting-started-with-ebitengine/go.mod | 14 +++++++++++ 0002-getting-started-with-ebitengine/go.sum | 15 ++++++++++++ 0002-getting-started-with-ebitengine/main.go | 20 ++++++++++++++++ LICENSE | 21 +++++++++++++++++ README.md | 8 +++++++ 9 files changed, 110 insertions(+) create mode 100644 0001-game-dev-fundamentals/0001-game-dev-fundamentals.odp create mode 100644 0001-game-dev-fundamentals/go.mod create mode 100644 0001-game-dev-fundamentals/main.go create mode 100644 0002-getting-started-with-ebitengine/game.go create mode 100644 0002-getting-started-with-ebitengine/go.mod create mode 100644 0002-getting-started-with-ebitengine/go.sum create mode 100644 0002-getting-started-with-ebitengine/main.go create mode 100644 LICENSE create mode 100644 README.md diff --git a/0001-game-dev-fundamentals/0001-game-dev-fundamentals.odp b/0001-game-dev-fundamentals/0001-game-dev-fundamentals.odp new file mode 100644 index 0000000000000000000000000000000000000000..88be074a7642f84f74914247eb1f4cc63debf943 GIT binary patch literal 21652 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 literal 0 HcmV?d00001 diff --git a/0001-game-dev-fundamentals/go.mod b/0001-game-dev-fundamentals/go.mod new file mode 100644 index 0000000..f47bfda --- /dev/null +++ b/0001-game-dev-fundamentals/go.mod @@ -0,0 +1,3 @@ +module helloworld + +go 1.19 diff --git a/0001-game-dev-fundamentals/main.go b/0001-game-dev-fundamentals/main.go new file mode 100644 index 0000000..f7b60bd --- /dev/null +++ b/0001-game-dev-fundamentals/main.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, world!") +} diff --git a/0002-getting-started-with-ebitengine/game.go b/0002-getting-started-with-ebitengine/game.go new file mode 100644 index 0000000..4bc52cd --- /dev/null +++ b/0002-getting-started-with-ebitengine/game.go @@ -0,0 +1,22 @@ +package main + +import "github.com/hajimehoshi/ebiten/v2" + +type game struct { +} + +func (g game) Update() error { + return nil +} + +func (g game) Draw(screen *ebiten.Image) { + +} + +func (g game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { + return outsideWidth, outsideHeight // Set viewport size to new window size. +} + +func newGame() *game { + return &game{} +} diff --git a/0002-getting-started-with-ebitengine/go.mod b/0002-getting-started-with-ebitengine/go.mod new file mode 100644 index 0000000..59c3000 --- /dev/null +++ b/0002-getting-started-with-ebitengine/go.mod @@ -0,0 +1,14 @@ +module gettingstarted + +go 1.19 + +require github.com/hajimehoshi/ebiten/v2 v2.7.8 + +require ( + github.com/ebitengine/gomobile v0.0.0-20240802043200-192f051f4fcc // indirect + github.com/ebitengine/hideconsole v1.0.0 // indirect + github.com/ebitengine/purego v0.7.1 // indirect + github.com/jezek/xgb v1.1.1 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.23.0 // indirect +) diff --git a/0002-getting-started-with-ebitengine/go.sum b/0002-getting-started-with-ebitengine/go.sum new file mode 100644 index 0000000..e1fecbe --- /dev/null +++ b/0002-getting-started-with-ebitengine/go.sum @@ -0,0 +1,15 @@ +github.com/ebitengine/gomobile v0.0.0-20240802043200-192f051f4fcc h1:76TYsaP1F48tiQRlrr71NsbfxBcFM9/8bEHS9/JbsQg= +github.com/ebitengine/gomobile v0.0.0-20240802043200-192f051f4fcc/go.mod h1:RM/c3pvru6dRqgGEW7RCTb6czFXYAa3MxbXu3u8/dcI= +github.com/ebitengine/hideconsole v1.0.0 h1:5J4U0kXF+pv/DhiXt5/lTz0eO5ogJ1iXb8Yj1yReDqE= +github.com/ebitengine/hideconsole v1.0.0/go.mod h1:hTTBTvVYWKBuxPr7peweneWdkUwEuHuB3C1R/ielR1A= +github.com/ebitengine/purego v0.7.1 h1:6/55d26lG3o9VCZX8lping+bZcmShseiqlh2bnUDiPA= +github.com/ebitengine/purego v0.7.1/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= +github.com/hajimehoshi/ebiten/v2 v2.7.8 h1:QrlvF2byCzMuDsbxFReJkOCbM3O2z1H/NKQaGcA8PKk= +github.com/hajimehoshi/ebiten/v2 v2.7.8/go.mod h1:Ulbq5xDmdx47P24EJ+Mb31Zps7vQq+guieG9mghQUaA= +github.com/jezek/xgb v1.1.1 h1:bE/r8ZZtSv7l9gk6nU0mYx51aXrvnyb44892TwSaqS4= +github.com/jezek/xgb v1.1.1/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk= +golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= +golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/0002-getting-started-with-ebitengine/main.go b/0002-getting-started-with-ebitengine/main.go new file mode 100644 index 0000000..a1dbd1d --- /dev/null +++ b/0002-getting-started-with-ebitengine/main.go @@ -0,0 +1,20 @@ +package main + +import ( + "log" + + "github.com/hajimehoshi/ebiten/v2" +) + +func main() { + ebiten.SetWindowTitle("TT0002: Getting Started with Ebitengine") + ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled) + ebiten.SetWindowSize(800, 600) + ebiten.SetVsyncEnabled(true) + ebiten.SetTPS(60) + + err := ebiten.RunGame(newGame()) + if err != nil { + log.Fatal(err) + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..25b0b31 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Trevor Slocum + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..f0cc238 --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# Trevor's Tutorials - Free programming tutorials +[![Donate via LiberaPay](https://img.shields.io/liberapay/receives/rocket9labs.com.svg?logo=liberapay)](https://liberapay.com/rocket9labs.com) + +Visit [**trevors-tutorials.com**](https://trevors-tutorials.com) + +## Support + +Please share issues and suggestions [here](https://code.rocket9labs.com/tslocum/trevors-tutorials.com/issues).