Abdulmujeeb Raji
a1f6d8fe7f
As of right now, we don't actually do anything with the token. But at
least we're actually able to get it. 😅
Caveats in implementation:
- UI now needs a pointer to player
- .env is now required for server auth (mentioned in README.md)
135 lines
4.3 KiB
Go
135 lines
4.3 KiB
Go
package ui
|
|
|
|
import (
|
|
// Image
|
|
img "image"
|
|
|
|
// Ambition
|
|
p "github.com/devraza/ambition/frontend/player"
|
|
|
|
// EbitenUI
|
|
"github.com/ebitenui/ebitenui/image"
|
|
"github.com/ebitenui/ebitenui/widget"
|
|
)
|
|
|
|
func makeLoginWindow(width, height int, root *widget.Container, shown *widget.Container, player *p.Player) {
|
|
// Define the contents of the login window
|
|
loginContainer := widget.NewContainer(
|
|
widget.ContainerOpts.BackgroundImage(image.NewNineSliceColor(ui.colors["gray"])),
|
|
// the container will use a row layout to layout the textinput widgets
|
|
widget.ContainerOpts.Layout(widget.NewRowLayout(
|
|
widget.RowLayoutOpts.Direction(widget.DirectionVertical),
|
|
widget.RowLayoutOpts.Spacing(10),
|
|
widget.RowLayoutOpts.Padding(widget.NewInsetsSimple(20)))),
|
|
)
|
|
loginContainer.AddChild(widget.NewText(
|
|
widget.TextOpts.Text("Login", headingFace, ui.colors["purple"]),
|
|
widget.TextOpts.WidgetOpts(widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Position: widget.RowLayoutPositionCenter,
|
|
Stretch: false,
|
|
})),
|
|
))
|
|
loginContainer.AddChild(widget.NewGraphic(
|
|
widget.GraphicOpts.WidgetOpts(widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Stretch: true,
|
|
MaxHeight: 2,
|
|
})),
|
|
widget.GraphicOpts.ImageNineSlice(image.NewNineSliceColor(ui.colors["gray"])),
|
|
))
|
|
// Create the text inputs
|
|
usernameInput := widget.NewTextInput(
|
|
widget.TextInputOpts.WidgetOpts(
|
|
widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Position: widget.RowLayoutPositionCenter,
|
|
Stretch: true,
|
|
}),
|
|
),
|
|
widget.TextInputOpts.Image(&widget.TextInputImage{
|
|
Idle: image.NewNineSliceColor(ui.colors["black"]),
|
|
Disabled: image.NewNineSliceColor(ui.colors["cyan"]),
|
|
}),
|
|
widget.TextInputOpts.Face(defaultFace),
|
|
widget.TextInputOpts.Color(&widget.TextInputColor{
|
|
Idle: ui.colors["white"],
|
|
Disabled: ui.colors["light_gray"],
|
|
Caret: ui.colors["green"],
|
|
}),
|
|
widget.TextInputOpts.Padding(widget.NewInsetsSimple(10)),
|
|
widget.TextInputOpts.CaretOpts(
|
|
widget.CaretOpts.Size(defaultFace, 2),
|
|
),
|
|
widget.TextInputOpts.Placeholder("Username"),
|
|
)
|
|
passwordInput := widget.NewTextInput(
|
|
widget.TextInputOpts.WidgetOpts(
|
|
widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Position: widget.RowLayoutPositionCenter,
|
|
Stretch: true,
|
|
}),
|
|
),
|
|
widget.TextInputOpts.Image(&widget.TextInputImage{
|
|
Idle: image.NewNineSliceColor(ui.colors["black"]),
|
|
Disabled: image.NewNineSliceColor(ui.colors["cyan"]),
|
|
}),
|
|
widget.TextInputOpts.Face(defaultFace),
|
|
widget.TextInputOpts.Color(&widget.TextInputColor{
|
|
Idle: ui.colors["white"],
|
|
Disabled: ui.colors["light_gray"],
|
|
Caret: ui.colors["green"],
|
|
}),
|
|
widget.TextInputOpts.Padding(widget.NewInsetsSimple(10)),
|
|
widget.TextInputOpts.CaretOpts(
|
|
widget.CaretOpts.Size(defaultFace, 2),
|
|
),
|
|
// Hide the text inputted
|
|
widget.TextInputOpts.Secure(true),
|
|
|
|
widget.TextInputOpts.Placeholder("Password"),
|
|
)
|
|
// Add the text inputs to the login window
|
|
loginContainer.AddChild(usernameInput)
|
|
loginContainer.AddChild(passwordInput)
|
|
loginContainer.AddChild(widget.NewGraphic(
|
|
widget.GraphicOpts.WidgetOpts(widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Stretch: true,
|
|
MaxHeight: 20,
|
|
})),
|
|
widget.GraphicOpts.ImageNineSlice(image.NewNineSliceColor(ui.colors["gray"])),
|
|
))
|
|
|
|
// Define the 'confirm' button
|
|
confirmButton := widget.NewButton(
|
|
// Button options
|
|
widget.ButtonOpts.WidgetOpts(
|
|
// Center the button both horizontally and vertically
|
|
widget.WidgetOpts.LayoutData(widget.RowLayoutData{
|
|
Position: widget.RowLayoutPositionCenter,
|
|
Stretch: false,
|
|
}),
|
|
),
|
|
// More options
|
|
widget.ButtonOpts.Image(buttonImage),
|
|
widget.ButtonOpts.Text("Confirm", defaultFace, &widget.ButtonTextColor{
|
|
Idle: ui.colors["white"],
|
|
}),
|
|
// Define the padding on the button
|
|
widget.ButtonOpts.TextPadding(widget.Insets{
|
|
Left: 20,
|
|
Right: 20,
|
|
Top: 10,
|
|
Bottom: 10,
|
|
}),
|
|
// Button on-click handler
|
|
widget.ButtonOpts.ClickedHandler(func(args *widget.ButtonClickedEventArgs) {
|
|
player.Init(usernameInput.InputText, passwordInput.InputText)
|
|
removeContainer(root, loginContainer)
|
|
addContainer(root, shown)
|
|
}),
|
|
)
|
|
loginContainer.AddChild(confirmButton)
|
|
|
|
// Place and show the login container
|
|
placeContainer(loginContainer, ui.width/3, ui.height/4, img.Point{ui.width / 3, ui.height / 3})
|
|
addContainer(root, loginContainer)
|
|
}
|