Urban Terror is now launching, in local X or in another.

This commit is contained in:
Stanislav Nikitin 2016-10-04 18:09:14 +05:00
parent ac938c16eb
commit cff72734c6
3 changed files with 51 additions and 10 deletions

View File

@ -23,6 +23,9 @@ Planning:
* Game updating (not from official servers yet, sorry). * Game updating (not from official servers yet, sorry).
* Pickup/matchmaking interfaces. * Pickup/matchmaking interfaces.
* All kinds of notifications. * All kinds of notifications.
* Extended profile editor, so every profile could have own configuration
files, etc.
* Clipboard monitoring.
* ...maybe more :) * ...maybe more :)
# Installation # Installation

View File

@ -12,34 +12,72 @@ package launcher
import ( import (
// stdlib // stdlib
"fmt" "fmt"
"os"
"os/exec" "os/exec"
"strconv"
"strings"
// local
"github.com/pztrn/urtrator/datamodels"
) )
type Launcher struct {} type Launcher struct {}
func (l *Launcher) findFreeDisplay() string {
current_display_raw := os.Getenv("DISPLAY")
current_display, _ := strconv.Atoi(strings.Split(current_display_raw, ":")[1])
current_display += 1
return strconv.Itoa(current_display)
}
func (l *Launcher) Initialize() { func (l *Launcher) Initialize() {
fmt.Println("Initializing game launcher...") fmt.Println("Initializing game launcher...")
} }
func (l *Launcher) Launch(binary string, params string, server string, password string, second_x bool, callback func()) { func (l *Launcher) Launch(profile *datamodels.Profile, server string, password string, callback func()) {
// ToDo: only one instance of Urban Terror should be launched, so button // ToDo: only one instance of Urban Terror should be launched, so button
// should be disabled. // should be disabled.
fmt.Println("Launching Urban Terror...") fmt.Println("Launching Urban Terror...")
done := make(chan bool, 1) done := make(chan bool, 1)
// Create launch string. // Create launch string.
var launch_string string = params + " +connect " + server var launch_bin string = ""
if len(password) > 0 { launch_bin, err := exec.LookPath(profile.Binary)
launch_string += " +password " + password if err != nil {
fmt.Println(err.Error())
} }
fmt.Println("Final command: " + launch_string)
var launch_params []string
if len(server) > 0 {
launch_params = append(launch_params, "+connect", server)
}
if len(password) > 0 {
launch_params = append(launch_params, "+password", password)
}
if len(profile.Additional_params) > 0 {
additional_params := strings.Split(profile.Additional_params, " ")
launch_params = append(launch_params, additional_params...)
}
if profile.Second_x_session == "1" {
fmt.Println(launch_params)
launch_params = append([]string{launch_bin}, launch_params...)
display := l.findFreeDisplay()
launch_bin, err = exec.LookPath("xinit")
if err != nil {
fmt.Println(err.Error())
}
launch_params = append(launch_params, "--", ":" + display)
}
fmt.Println(launch_params)
go func() { go func() {
go func() { go func() {
cmd := exec.Command(binary, launch_string) cmd := exec.Command(launch_bin, launch_params...)
err := cmd.Run() out, err1 := cmd.Output()
if err != nil { if err1 != nil {
fmt.Println("Launch error: " + err.Error()) fmt.Println("Launch error: " + err1.Error())
} }
fmt.Println(string(out))
done <- true done <- true
}() }()

View File

@ -468,7 +468,7 @@ func (m *MainWindow) launchGame() error {
m.statusbar.Push(m.statusbar_context_id, "Launching Urban Terror...") m.statusbar.Push(m.statusbar_context_id, "Launching Urban Terror...")
m.launch_button.SetSensitive(false) m.launch_button.SetSensitive(false)
// ToDo: handling server passwords. // ToDo: handling server passwords.
ctx.Launcher.Launch(profile[0].Binary, profile[0].Additional_params, srv_address, "", m.unlockInterface) ctx.Launcher.Launch(&profile[0], srv_address, "", m.unlockInterface)
return nil return nil
} }