Merge branch 'main' of https://github.com/devraza/ambition
This commit is contained in:
commit
6d5b74f7d0
|
@ -1,7 +1,7 @@
|
||||||
# Backend Usage
|
# Backend Usage
|
||||||
|
|
||||||
In order for this to work, you need to have [sqlite3](https://sqlite.org)
|
In order to run the backend, you need to have [sqlite3](https://sqlite.org)
|
||||||
installed on your system. Once you do, make a databse called `users.db`
|
installed on your system. Once you do, make a database file named `users.db`
|
||||||
and initialize it with the `sql/init.sql` script:
|
and initialize it with the `sql/init.sql` script:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -12,4 +12,5 @@ You also need to create a `.env` file with the following variables:
|
||||||
|
|
||||||
- `JWT_SECRET`: Required. A cryptographically secure string used to encode
|
- `JWT_SECRET`: Required. A cryptographically secure string used to encode
|
||||||
tokens.
|
tokens.
|
||||||
- `PORT`: Optional. Overrides the default port of `7741`
|
- `PORT`: Optional. Overrides the default port of `7741`
|
||||||
|
|
||||||
|
|
BIN
frontend/assets/fonts/FiraMono/FiraMono-Bold.ttf
Normal file
BIN
frontend/assets/fonts/FiraMono/FiraMono-Bold.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/FiraMono/FiraMono-Medium.ttf
Normal file
BIN
frontend/assets/fonts/FiraMono/FiraMono-Medium.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/FiraMono/FiraMono-Regular.ttf
Normal file
BIN
frontend/assets/fonts/FiraMono/FiraMono-Regular.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-Bold.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-Bold.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-ExtraLight.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-ExtraLight.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-Light.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-Light.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-Medium.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-Medium.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-Regular.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-Regular.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-SemiBold.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-SemiBold.ttf
Normal file
Binary file not shown.
BIN
frontend/assets/fonts/VictorMono/VictorMono-Thin.ttf
Normal file
BIN
frontend/assets/fonts/VictorMono/VictorMono-Thin.ttf
Normal file
Binary file not shown.
|
@ -5,9 +5,33 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
//go:embed iosevka-bold.ttf
|
// Iosevka
|
||||||
|
//go:embed Iosevka/iosevka-bold.ttf
|
||||||
IosevkaBold_ttf []byte
|
IosevkaBold_ttf []byte
|
||||||
|
//go:embed Iosevka/iosevka-regular.ttf
|
||||||
//go:embed iosevka-regular.ttf
|
|
||||||
IosevkaRegular_ttf []byte
|
IosevkaRegular_ttf []byte
|
||||||
|
|
||||||
|
/// FiraCode
|
||||||
|
//go:embed FiraMono/FiraMono-Bold.ttf
|
||||||
|
FiraBold_ttf []byte
|
||||||
|
//go:embed FiraMono/FiraMono-Medium.ttf
|
||||||
|
FiraMedium_ttf []byte
|
||||||
|
//go:embed FiraMono/FiraMono-Regular.ttf
|
||||||
|
FiraRegular_ttf []byte
|
||||||
|
|
||||||
|
/// Victor Mono
|
||||||
|
//go:embed VictorMono/VictorMono-ExtraLight.ttf
|
||||||
|
VictorExtraLight_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-Thin.ttf
|
||||||
|
VictorThin_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-Light.ttf
|
||||||
|
VictorLight_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-Regular.ttf
|
||||||
|
VictorRegular_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-Medium.ttf
|
||||||
|
VictorMedium_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-SemiBold.ttf
|
||||||
|
VictorSemiBold_ttf []byte
|
||||||
|
//go:embed VictorMono/VictorMono-Bold.ttf
|
||||||
|
VictorBold_ttf []byte
|
||||||
)
|
)
|
||||||
|
|
3
frontend/assets/fonts/go.mod
Normal file
3
frontend/assets/fonts/go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/devraza/ambition/frontend/assets/fonts
|
||||||
|
|
||||||
|
go 1.20
|
|
@ -1,20 +1,29 @@
|
||||||
module github.com/devraza/ambition
|
module github.com/devraza/ambition/frontend
|
||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/ebitenui/ebitenui v0.5.4
|
github.com/devraza/ambition/frontend/player v0.0.0-00010101000000-000000000000
|
||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
github.com/devraza/ambition/frontend/ui v0.0.0-00010101000000-000000000000
|
||||||
github.com/hajimehoshi/ebiten/v2 v2.5.5
|
github.com/hajimehoshi/ebiten/v2 v2.5.5
|
||||||
golang.org/x/image v0.7.0
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/devraza/ambition/frontend/assets/fonts v0.0.0-00010101000000-000000000000 // indirect
|
||||||
github.com/ebitengine/purego v0.3.2 // indirect
|
github.com/ebitengine/purego v0.3.2 // indirect
|
||||||
|
github.com/ebitenui/ebitenui v0.5.4 // indirect
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
|
||||||
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
|
||||||
github.com/jezek/xgb v1.1.0 // indirect
|
github.com/jezek/xgb v1.1.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect
|
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 // indirect
|
||||||
|
golang.org/x/image v0.9.0 // indirect
|
||||||
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 // indirect
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 // indirect
|
||||||
golang.org/x/sync v0.2.0 // indirect
|
golang.org/x/sync v0.2.0 // indirect
|
||||||
golang.org/x/sys v0.8.0 // indirect
|
golang.org/x/sys v0.8.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
|
replace (
|
||||||
|
github.com/devraza/ambition/frontend/assets/fonts => ./assets/fonts
|
||||||
|
github.com/devraza/ambition/frontend/player => ./player
|
||||||
|
github.com/devraza/ambition/frontend/ui => ./ui
|
||||||
|
)
|
||||||
|
|
|
@ -24,8 +24,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
|
||||||
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU=
|
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56 h1:estk1glOnSVeJ9tdEZZc5mAMDZk5lNJNyJ6DvrBkTEU=
|
||||||
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
|
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
|
||||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.7.0 h1:gzS29xtG1J5ybQlv0PuyfE3nmc6R4qB73m6LUUmvFuw=
|
golang.org/x/image v0.9.0 h1:QrzfX26snvCM20hIhBwuHI/ThTg18b/+kcKdXHvnR+g=
|
||||||
golang.org/x/image v0.7.0/go.mod h1:nd/q4ef1AKKYl/4kft7g+6UyGbdiqWqTP1ZAbRoV7Rg=
|
golang.org/x/image v0.9.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0=
|
||||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||||
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 h1:539vykMVJsmdiucRtMmdeLLZaTVhWhaAHFcPabj2lws=
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 h1:539vykMVJsmdiucRtMmdeLLZaTVhWhaAHFcPabj2lws=
|
||||||
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41/go.mod h1:aAjjkJNdrh3PMckS4B10TGS2nag27cbKR1y2BpUxsiY=
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41/go.mod h1:aAjjkJNdrh3PMckS4B10TGS2nag27cbKR1y2BpUxsiY=
|
||||||
|
@ -59,8 +59,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
|
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// Random
|
// Misc.
|
||||||
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|
||||||
// Logs
|
// Ambition
|
||||||
"log"
|
p "github.com/devraza/ambition/frontend/player"
|
||||||
|
u "github.com/devraza/ambition/frontend/ui"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
// Ebitengine
|
// Ebitengine
|
||||||
"github.com/hajimehoshi/ebiten/v2"
|
"github.com/hajimehoshi/ebiten/v2"
|
||||||
|
@ -15,12 +15,12 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Initialise the test player
|
// Initialise the test player
|
||||||
var testPlayer = initPlayer()
|
var testPlayer = p.GetPlayer()
|
||||||
|
|
||||||
// Create the `Game` struct
|
// Create the `Game` struct
|
||||||
type Game struct {
|
type Game struct {
|
||||||
ui UI
|
ui u.UI
|
||||||
activePlayer Player
|
activePlayer p.Player
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define the window width/height
|
// Define the window width/height
|
||||||
|
@ -31,15 +31,15 @@ const (
|
||||||
|
|
||||||
// Update implements Game
|
// Update implements Game
|
||||||
func (g *Game) Update() error {
|
func (g *Game) Update() error {
|
||||||
g.ui.base.Update()
|
g.ui.Base.Update()
|
||||||
g.activePlayer.update()
|
g.activePlayer.Update()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw implements Game
|
// Draw implements Game
|
||||||
func (g *Game) Draw(screen *ebiten.Image) {
|
func (g *Game) Draw(screen *ebiten.Image) {
|
||||||
// Draw the UI onto the screen
|
// Draw the UI onto the screen
|
||||||
g.ui.base.Draw(screen)
|
g.ui.Base.Draw(screen)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Layout implements Game
|
// Layout implements Game
|
||||||
|
@ -62,14 +62,12 @@ func main() {
|
||||||
// Engine setup
|
// Engine setup
|
||||||
ebiten.SetWindowSize(window_width, window_height)
|
ebiten.SetWindowSize(window_width, window_height)
|
||||||
ebiten.SetWindowTitle(window_title)
|
ebiten.SetWindowTitle(window_title)
|
||||||
|
|
||||||
testPlayer := initPlayer()
|
|
||||||
|
|
||||||
// Initialise the game
|
// Initialise the game
|
||||||
game := Game{
|
game := Game{
|
||||||
// Initialise the UI
|
// Initialise the UI
|
||||||
activePlayer: testPlayer,
|
activePlayer: testPlayer,
|
||||||
ui: uiInit(window_width, window_height),
|
ui: u.UiInit(window_width, window_height),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log and exit on error
|
// Log and exit on error
|
||||||
|
|
3
frontend/player/go.mod
Normal file
3
frontend/player/go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module github.com/devraza/ambition/frontend/player
|
||||||
|
|
||||||
|
go 1.20
|
|
@ -1,16 +1,17 @@
|
||||||
package main
|
package player
|
||||||
|
|
||||||
import ()
|
import ()
|
||||||
|
|
||||||
// The player struct
|
// The player struct
|
||||||
type Player struct {
|
type Player struct {
|
||||||
health int
|
Health int
|
||||||
health_max int
|
MaxHealth int
|
||||||
defence int
|
Defence int
|
||||||
level int
|
Level int
|
||||||
exp float32
|
Exp float32
|
||||||
ambition float32
|
NextExp float32
|
||||||
ambition_max float32
|
Ambition float32
|
||||||
|
MaxAmbition float32
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the maps for the level/(max) ambition gates
|
// Create the maps for the level/(max) ambition gates
|
||||||
|
@ -18,15 +19,16 @@ var level_gates = make(map[int]float32)
|
||||||
var level_ambition = make(map[int]float32)
|
var level_ambition = make(map[int]float32)
|
||||||
|
|
||||||
// TODO(midnadimple): Move player initialization to server upon login
|
// TODO(midnadimple): Move player initialization to server upon login
|
||||||
func initPlayer() Player {
|
func GetPlayer() Player {
|
||||||
return Player{
|
return Player{
|
||||||
health: 100,
|
Health: 100,
|
||||||
health_max: 100,
|
MaxHealth: 100,
|
||||||
defence: 0,
|
Defence: 0,
|
||||||
level: 1,
|
Level: 1,
|
||||||
exp: 0.0,
|
Exp: 0.0,
|
||||||
ambition: 0.0, // NOTE(midnadimple): In the future this will be affected by player activity
|
NextExp: 0.0,
|
||||||
ambition_max: level_ambition[1], // NOTE(midnadimple): In the future this will be affected by player activity
|
Ambition: 0.0, // NOTE(midnadimple): In the future this will be affected by player activity
|
||||||
|
MaxAmbition: level_ambition[1], // NOTE(midnadimple): In the future this will be affected by player activity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +39,7 @@ func gain(basexp float32, modifier float32) float32 {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the player
|
// Update the player
|
||||||
func (p *Player) update() {
|
func (p *Player) Update() {
|
||||||
// TODO(midnadimple): update health upon damage
|
// TODO(midnadimple): update health upon damage
|
||||||
|
|
||||||
// Auto-generate the level gates
|
// Auto-generate the level gates
|
||||||
|
@ -70,10 +72,13 @@ func (p *Player) update() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set the XP needed for the player to reach the next level
|
||||||
|
p.NextExp = level_gates[p.Level]
|
||||||
|
|
||||||
// Set the XP to 0 and increase both the level and max ambition on level up
|
// Set the XP to 0 and increase both the level and max ambition on level up
|
||||||
if p.exp >= level_gates[p.level] {
|
if p.Exp >= level_gates[p.Level] {
|
||||||
p.exp = 0.0
|
p.Exp = 0.0
|
||||||
p.level += 1
|
p.Level += 1
|
||||||
p.ambition_max = level_ambition[p.level]
|
p.MaxAmbition = level_ambition[p.Level]
|
||||||
}
|
}
|
||||||
}
|
}
|
24
frontend/ui/go.mod
Normal file
24
frontend/ui/go.mod
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
module github.com/devraza/ambition/frontend/ui
|
||||||
|
|
||||||
|
go 1.20
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/devraza/ambition/frontend/assets/fonts v0.0.0-00010101000000-000000000000
|
||||||
|
github.com/ebitenui/ebitenui v0.5.4
|
||||||
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
|
||||||
|
golang.org/x/image v0.9.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/ebitengine/purego v0.3.2 // indirect
|
||||||
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
|
||||||
|
github.com/hajimehoshi/ebiten/v2 v2.5.4 // indirect
|
||||||
|
github.com/jezek/xgb v1.1.0 // indirect
|
||||||
|
golang.org/x/exp/shiny v0.0.0-20230522175609-2e198f4a06a1 // indirect
|
||||||
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 // indirect
|
||||||
|
golang.org/x/sync v0.2.0 // indirect
|
||||||
|
golang.org/x/sys v0.8.0 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
|
replace github.com/devraza/ambition/frontend/assets/fonts => ../assets/fonts
|
||||||
|
replace github.com/devraza/ambition/frontend/player => ../player
|
61
frontend/ui/go.sum
Normal file
61
frontend/ui/go.sum
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/ebitengine/purego v0.3.2 h1:+pV+tskAkn/bxEcUzGtDfw2VAe3bRQ26kdzFjPPrCww=
|
||||||
|
github.com/ebitengine/purego v0.3.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
|
||||||
|
github.com/ebitenui/ebitenui v0.5.4 h1:iXFIa+W/MZG88gGDwOvCU9TSzecnZsXWkrve+jjorEI=
|
||||||
|
github.com/ebitenui/ebitenui v0.5.4/go.mod h1:2iyyjninLWNQLZ+pdV/eJ9vRnSs+I+HrzEBLEIH4Y9A=
|
||||||
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b h1:GgabKamyOYguHqHjSkDACcgoPIz3w0Dis/zJ1wyHHHU=
|
||||||
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||||
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
|
github.com/hajimehoshi/bitmapfont/v2 v2.2.3 h1:jmq/TMNj352V062Tr5e3hAoipkoxCbY1JWTzor0zNps=
|
||||||
|
github.com/hajimehoshi/ebiten/v2 v2.5.4 h1:NvUU6LvVc6oc+u+rD9KfHMjruRdpNwbpalVUINNXufU=
|
||||||
|
github.com/hajimehoshi/ebiten/v2 v2.5.4/go.mod h1:mnHSOVysTr/nUZrN1lBTRqhK4NG+T9NR3JsJP2rCppk=
|
||||||
|
github.com/jezek/xgb v1.1.0 h1:wnpxJzP1+rkbGclEkmwpVFQWpuE2PUGNUzP8SbfFobk=
|
||||||
|
github.com/jezek/xgb v1.1.0/go.mod h1:nrhwO0FX/enq75I7Y7G8iN1ubpSGZEiA3v9e9GyRFlk=
|
||||||
|
github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
|
||||||
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/exp/shiny v0.0.0-20230522175609-2e198f4a06a1 h1:NxHSRPlbeyFGDc6rU7YsvxV/4bXS9XhuvUt5pP63XUs=
|
||||||
|
golang.org/x/exp/shiny v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:UH99kUObWAZkDnWqppdQe5ZhPYESUw8I0zVV1uWBR+0=
|
||||||
|
golang.org/x/image v0.9.0 h1:QrzfX26snvCM20hIhBwuHI/ThTg18b/+kcKdXHvnR+g=
|
||||||
|
golang.org/x/image v0.9.0/go.mod h1:jtrku+n79PfroUbvDdeUWMAI+heR786BofxrbiSF+J0=
|
||||||
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41 h1:539vykMVJsmdiucRtMmdeLLZaTVhWhaAHFcPabj2lws=
|
||||||
|
golang.org/x/mobile v0.0.0-20230427221453-e8d11dd0ba41/go.mod h1:aAjjkJNdrh3PMckS4B10TGS2nag27cbKR1y2BpUxsiY=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
|
||||||
|
golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
|
||||||
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
|
||||||
|
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|
@ -1,4 +1,4 @@
|
||||||
package main
|
package ui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
// Image-related packages
|
// Image-related packages
|
||||||
|
@ -8,24 +8,30 @@ import (
|
||||||
// Misc.
|
// Misc.
|
||||||
// "fmt"
|
// "fmt"
|
||||||
|
|
||||||
|
// Ambition
|
||||||
|
p "github.com/devraza/ambition/frontend/player"
|
||||||
|
|
||||||
// EbitenUI
|
// EbitenUI
|
||||||
"github.com/ebitenui/ebitenui"
|
"github.com/ebitenui/ebitenui"
|
||||||
"github.com/ebitenui/ebitenui/image"
|
"github.com/ebitenui/ebitenui/image"
|
||||||
"github.com/ebitenui/ebitenui/widget"
|
"github.com/ebitenui/ebitenui/widget"
|
||||||
|
|
||||||
// Fonts
|
// Fonts
|
||||||
"github.com/devraza/ambition/assets/fonts"
|
"github.com/devraza/ambition/frontend/assets/fonts"
|
||||||
"github.com/golang/freetype/truetype"
|
"github.com/golang/freetype/truetype"
|
||||||
"golang.org/x/image/font"
|
"golang.org/x/image/font"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The UI struct
|
// The UI struct
|
||||||
type UI struct {
|
type UI struct {
|
||||||
base ebitenui.UI
|
Base ebitenui.UI
|
||||||
colors map[string]color.RGBA
|
colors map[string]color.RGBA
|
||||||
width, height int
|
width, height int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the player from the `player` package
|
||||||
|
var player = p.GetPlayer()
|
||||||
|
|
||||||
// The `hazakura` colorscheme (default)
|
// The `hazakura` colorscheme (default)
|
||||||
var hazakura = map[string]color.RGBA{
|
var hazakura = map[string]color.RGBA{
|
||||||
// The monotone colors
|
// The monotone colors
|
||||||
|
@ -49,7 +55,7 @@ var hazakura = map[string]color.RGBA{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function for UI initialization
|
// Function for UI initialization
|
||||||
func uiInit(width, height int) UI {
|
func UiInit(width, height int) UI {
|
||||||
var ui UI
|
var ui UI
|
||||||
|
|
||||||
// Define the UI colors
|
// Define the UI colors
|
||||||
|
@ -69,8 +75,8 @@ func uiInit(width, height int) UI {
|
||||||
)
|
)
|
||||||
|
|
||||||
// Make the different faces
|
// Make the different faces
|
||||||
headingFace, _ := makeFace(18, fonts.IosevkaBold_ttf)
|
headingFace, _ := makeFace(18, fonts.FiraBold_ttf)
|
||||||
defaultFace, _ := makeFace(14, fonts.IosevkaRegular_ttf)
|
defaultFace, _ := makeFace(14, fonts.FiraRegular_ttf)
|
||||||
|
|
||||||
// Create the 'Profile' tab
|
// Create the 'Profile' tab
|
||||||
tabProfile := widget.NewTabBookTab("Profile",
|
tabProfile := widget.NewTabBookTab("Profile",
|
||||||
|
@ -159,49 +165,19 @@ func uiInit(width, height int) UI {
|
||||||
VerticalPosition: widget.AnchorLayoutPositionCenter,
|
VerticalPosition: widget.AnchorLayoutPositionCenter,
|
||||||
})),
|
})),
|
||||||
))
|
))
|
||||||
// Define the titlebar for the window
|
chatDimensionX, chatDimensionY := int(float32(width)/3.5), int(float32(height)/3)
|
||||||
chatTitleContainer := widget.NewContainer(
|
chat := img.Rect(0, 0, chatDimensionX, chatDimensionY)
|
||||||
// Set the background color of the titlebar
|
chat = chat.Add(img.Point{0, height - chatDimensionY})
|
||||||
widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(ui.colors["overlay"])),
|
// Set the position and size of the chat window
|
||||||
widget.ContainerOpts.Layout(widget.NewAnchorLayout()),
|
chatContainer.SetLocation(chat)
|
||||||
)
|
leftBar.AddChild(chatContainer)
|
||||||
chatTitleContainer.AddChild(widget.NewText(
|
|
||||||
widget.TextOpts.Text("Chat", headingFace, ui.colors["white"]),
|
|
||||||
widget.TextOpts.WidgetOpts(widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
|
|
||||||
HorizontalPosition: widget.AnchorLayoutPositionCenter,
|
|
||||||
VerticalPosition: widget.AnchorLayoutPositionCenter,
|
|
||||||
})),
|
|
||||||
))
|
|
||||||
|
|
||||||
// Define the chat window
|
|
||||||
chat := widget.NewWindow(
|
|
||||||
// Set the contents of the window
|
|
||||||
widget.WindowOpts.Contents(chatContainer),
|
|
||||||
// Set the titlebar for the window
|
|
||||||
widget.WindowOpts.TitleBar(chatTitleContainer, 25),
|
|
||||||
//Set the window above everything else and block input elsewhere
|
|
||||||
widget.WindowOpts.Modal(),
|
|
||||||
// Set how to close the window. CLICK_OUT will close the window when clicking anywhere
|
|
||||||
widget.WindowOpts.CloseMode(widget.CLICK_OUT),
|
|
||||||
// Make the window draggable
|
|
||||||
widget.WindowOpts.Draggable(),
|
|
||||||
// Make the window resizeable
|
|
||||||
widget.WindowOpts.Resizeable(),
|
|
||||||
// Set the minimum size of the window
|
|
||||||
widget.WindowOpts.MinSize(int(float32(width)/3.6), int(float32(height)/3.5)),
|
|
||||||
// Set the maximum size of the window
|
|
||||||
widget.WindowOpts.MaxSize(width/2, height/2),
|
|
||||||
)
|
|
||||||
// Place the window and add the window to the UI
|
|
||||||
showWindow(chat, ui, float32(width)-float32(width)/3.6, float32(height)-float32(height)/3.5)
|
|
||||||
ui.base.AddWindow(chat)
|
|
||||||
|
|
||||||
// Set the position and size of the left bar
|
// Set the position and size of the left bar
|
||||||
leftBar.SetLocation(img.Rect(0, 0, int(float32(width)/3.5), height))
|
leftBar.SetLocation(img.Rect(0, 0, int(float32(width)/3.5), height))
|
||||||
// Add the left bar to the root container
|
// Add the left bar to the root container
|
||||||
root.AddChild(leftBar)
|
root.AddChild(leftBar)
|
||||||
|
|
||||||
ui.base.Container = root
|
ui.Base.Container = root
|
||||||
|
|
||||||
return ui
|
return ui
|
||||||
}
|
}
|
||||||
|
@ -251,46 +227,11 @@ func makeStatsBars(parent *widget.TabBookTab, ui UI, face font.Face) {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
// Set the min, max, and current values for each progressbar
|
// Set the min, max, and current values for each progressbar
|
||||||
widget.ProgressBarOpts.Values(0, testPlayer.health, testPlayer.health),
|
widget.ProgressBarOpts.Values(0, player.Health, player.MaxHealth),
|
||||||
)
|
)
|
||||||
parent.AddChild(health)
|
parent.AddChild(health)
|
||||||
parent.AddChild(health_progressbar)
|
parent.AddChild(health_progressbar)
|
||||||
|
|
||||||
// Defence
|
|
||||||
defence := widget.NewText(
|
|
||||||
widget.TextOpts.Text("Defence", face, ui.colors["white"]),
|
|
||||||
widget.TextOpts.WidgetOpts(widget.WidgetOpts.LayoutData(widget.GridLayoutData{
|
|
||||||
HorizontalPosition: widget.GridLayoutPositionStart,
|
|
||||||
})),
|
|
||||||
)
|
|
||||||
defence_progressbar := widget.NewProgressBar(
|
|
||||||
widget.ProgressBarOpts.WidgetOpts(
|
|
||||||
// Set the required anchor layout data to determine where in the container to place the progressbar
|
|
||||||
widget.WidgetOpts.LayoutData(widget.AnchorLayoutData{
|
|
||||||
HorizontalPosition: widget.AnchorLayoutPositionCenter,
|
|
||||||
VerticalPosition: widget.AnchorLayoutPositionCenter,
|
|
||||||
}),
|
|
||||||
// Set the minimum size for the progressbar.
|
|
||||||
widget.WidgetOpts.MinSize(200, 20),
|
|
||||||
),
|
|
||||||
widget.ProgressBarOpts.Images(
|
|
||||||
// Set the track colors
|
|
||||||
&widget.ProgressBarImage{
|
|
||||||
Idle: image.NewNineSliceColor(ui.colors["black"]),
|
|
||||||
Hover: image.NewNineSliceColor(ui.colors["black"]),
|
|
||||||
},
|
|
||||||
// Set the progress colors
|
|
||||||
&widget.ProgressBarImage{
|
|
||||||
Idle: image.NewNineSliceColor(ui.colors["yellow"]),
|
|
||||||
Hover: image.NewNineSliceColor(ui.colors["yellow"]),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
// Set the min, max, and current values for each progressbar
|
|
||||||
widget.ProgressBarOpts.Values(0, testPlayer.health, testPlayer.health),
|
|
||||||
)
|
|
||||||
parent.AddChild(defence)
|
|
||||||
parent.AddChild(defence_progressbar)
|
|
||||||
|
|
||||||
// XP/Level
|
// XP/Level
|
||||||
level := widget.NewText(
|
level := widget.NewText(
|
||||||
widget.TextOpts.Text("Level", face, ui.colors["white"]),
|
widget.TextOpts.Text("Level", face, ui.colors["white"]),
|
||||||
|
@ -321,7 +262,7 @@ func makeStatsBars(parent *widget.TabBookTab, ui UI, face font.Face) {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
// Set the min, max, and current values for each progressbar
|
// Set the min, max, and current values for each progressbar
|
||||||
widget.ProgressBarOpts.Values(0, testPlayer.health, testPlayer.health_max),
|
widget.ProgressBarOpts.Values(0, int(player.Exp), int(player.NextExp)),
|
||||||
)
|
)
|
||||||
parent.AddChild(level)
|
parent.AddChild(level)
|
||||||
parent.AddChild(level_progressbar)
|
parent.AddChild(level_progressbar)
|
||||||
|
@ -356,7 +297,7 @@ func makeStatsBars(parent *widget.TabBookTab, ui UI, face font.Face) {
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
// Set the min, max, and current values for each progressbar
|
// Set the min, max, and current values for each progressbar
|
||||||
widget.ProgressBarOpts.Values(0, testPlayer.health, testPlayer.health),
|
widget.ProgressBarOpts.Values(0, int(player.Ambition), int(player.MaxAmbition)),
|
||||||
)
|
)
|
||||||
parent.AddChild(ambition)
|
parent.AddChild(ambition)
|
||||||
parent.AddChild(ambition_progressbar)
|
parent.AddChild(ambition_progressbar)
|
Reference in a new issue