diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..4d8a1c2 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,58 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build Windows", + "type": "shell", + "command": "go", + "args": [ + "build", + "-o", + "release/windows/regin_mountain_game.exe", + "." + ], + "options": { + "env": { + "GOOS": "windows", + "GOARCH": "amd64" + } + }, + "group": "build", + "problemMatcher": [ + "$go" + ] + }, + { + "label": "Build Linux", + "type": "shell", + "command": "go", + "args": [ + "build", + "-o", + "release/linux/regin_mountain_game", + "." + ], + "options": { + "env": { + "GOOS": "linux", + "GOARCH": "amd64" + } + }, + "group": "build", + "problemMatcher": [ + "$go" + ] + }, + { + "label": "Build All", + "dependsOn": [ + "Build Windows", + "Build Linux" + ], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index b907d20..38f97f8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Regin_mountain_of_treasures - +# Regin_mountain_of_treasures + Ett spel som beretar historier om dvärgen Regin och hans äventyr Baserat på mitt didigare skol projekt Maze @@ -24,4 +24,29 @@ https://sv.wikipedia.org/wiki/Regin https://sv.wikipedia.org/wiki/Gram_(mytologi) -https://sv.wikipedia.org/wiki/Reidmar \ No newline at end of file +https://sv.wikipedia.org/wiki/Reidmar + +## Bygginstruktioner + +### Systemkrav & Beroenden +Eftersom spelet använder Ebitengine behöver du ha följande installerat för att kunna kompilera. + +**På Windows:** +Inget speciellt krävs utöver en modern version av Go. Ebitengine klarar sig bra för Windows-bygge även på Windows (ibland kan gcc/MinGW vara bra vid ljud-tjafs/cgo). + +**På Linux:** +Du behöver installera Go samt följande C-bibliotek för X11 och ljud: +```bash +sudo apt-get install libc6-dev libgl1-mesa-dev libxcursor-dev libxi-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libasound2-dev pkg-config +``` + +### Bygg spelet (VS Code Tasks) +Spelet stödjer publisering via fördefinierade VS Code Tasks. +Gå till `Terminal -> Run Task...` i VS Code. Följande alternativ finns: +* **Build Windows**: Kompilerar projektet för Windows (.exe) i mappen `release/windows`. +* **Build Linux**: Kompilerar projektet för Linux i mappen `release/linux`. +* **Build All**: Kompilerar för båda ovanstående plattformar. + +För att bygga manuellt: +* Linux: `GOOS=linux go build -o release/linux/regin_mountain_game .` +* Windows: `GOOS=windows go build -o release/windows/regin_mountain_game.exe .` \ No newline at end of file diff --git a/plan.md b/plan.md index e9841b1..3021c84 100644 --- a/plan.md +++ b/plan.md @@ -5,3 +5,11 @@ typ: spel * **Ebitengine** (`github.com/hajimehoshi/ebiten/v2`): Kärnmotor. Hanterar 2D-rendering av sprites (top-down + side-view), fönster, tangentbord/mus/handkontroll samt plattformsoberoende ljuduppspelning. * **net** (Standardbiblioteket) / **kcp-go** (`github.com/xtaci/kcp-go`): Nätverk för multiplayer. `net` erbjuder standard TCP/UDP, medan `kcp-go` ger "Reliable UDP" för snabb realtidsuppdatering utan dataförlust. * **mathgl** (`github.com/go-gl/mathgl/mgl64`): Vektormatematik (3D-vektorer). Används för koordinatsystemet och spelets 3D-positioner, vilket är basen för egen handkodad fysik (gravitation) och projicering ner till 2D-skärmen. + +## Kärnarkitektur +Spelets arkitektur bygger på att helt separera 3D-spellogiken från 2D-rendering. + +1. **3D Verklighet:** Varje spelfigur och block har en 3D-vektor (`X`, `Y`, `Z`) samt en storlek (`Width`, `Height`, `Depth`). Fysikmotorn (som bygger på euler-integrering och AABB-kollisioner) körs helt och hållet i denna 3D-värld. Tyngdkraft drar objekt neråt längs Y eller Z axeln. +2. **2D Rendering:** Spelet håller reda på aktuellt "ViewMode" (t.ex. TopDown eller SideView). I renderingen itererar motorn över 3D-objekten och översätter deras 3D-vektorer till `(X, Y)` på skärmen baserat på vald vy. Varje objekt har hänvisningar till olika 2D-sprites (t.ex. en bild fotograferad uppifrån, en från sidan) som sedan ritas med *Ebitengine*. +3. **Spelcykel (Game Loop):** Spelet styrs av en global `Game`-struct med en `Update()` (sköter 3D-fysik, input, state-förändringar) och en `Draw()` (översätter till 2D och ritar) funktion. +4. **States:** Koden är uppdelad i "Scenes" eller "States" (Huvudmeny, Gameplay-läge) för isolerad logik.