package goirsdk // import ( // "fmt" // "log" // "os" // "sort" // "testing" // "time" // ) // // type StandingsLine struct { // CarIdx int // LapPct float32 // Lap int32 // DriverName string // EstTime float32 // TimeBehind float32 // } // // func lapTimeRepresentation(t float32) string { // if t < 0 { // t = 0 // } // // wholeSeconds := int64(t) // lapTime := time.Unix(wholeSeconds, int64((t-float32(wholeSeconds))*1e9)) // // return lapTime.Format("04:05.000") // } // // func TestFunctionality(t *testing.T) { // input, err := os.Open("../../testTelemetry/supercars_race_watkins_glenn.ibt") // if err != nil { // t.Fatal("Was unable to prepare telemetry file for testing.") // } // // i, _ := Init(input, "", "") // defer i.Close() // // // Set up a loop to iterate our data // mainLoopTicker := time.NewTicker(time.Second / 60) // defer mainLoopTicker.Stop() // // for { // // Update the data that the SDK is holding with the next tick // _, err := i.Update(100 * time.Millisecond) // if err != nil { // log.Printf("could not update data: %v", err) // continue // } // // // Vehicle Movement data gathered from the names we can find on the // // telemetry_docs.pdf file // // - I wish to make this less verbose if possible // if _, ok := i.Vars.Vars["CarIdxPosition"]; !ok { // log.Fatal("Field `CarIdxPosition` doesn't exist") // } // driversLapDistPct := i.Vars.Vars["CarIdxLapDistPct"].Value.([]float32) // driversEstTime := i.Vars.Vars["CarIdxEstTime"].Value.([]float32) // driversLap := i.Vars.Vars["CarIdxLap"].Value.([]int32) // // driversBehind := i.Vars.Vars["CarIdxF2Time"].Value.([]float32) // // drivers := i.SessionInfo.DriverInfo.Drivers // myIdx := i.SessionInfo.DriverInfo.DriverCarIdx // // standings := make([]StandingsLine, len(drivers)) // // fmt.Printf("\033[?25l\033[2J\033[H") // for k := range len(drivers) { // if drivers[k].CarIsPaceCar == 1 || drivers[k].IsSpectator == 1 { // continue // } // // standings[k] = StandingsLine{ // CarIdx: k, // LapPct: driversLapDistPct[k], // DriverName: drivers[k].UserName, // EstTime: driversEstTime[k], // Lap: driversLap[k], // TimeBehind: driversEstTime[myIdx], // } // } // // sort.Slice(standings, func(i int, j int) bool { // if standings[i].Lap > int32(standings[j].Lap) { // return true // } // // return standings[i].LapPct >= standings[j].LapPct // }) // // fmt.Printf("%v\n", driversEstTime) // // for p, v := range standings { // // fmt.Printf("[%2d] %-30s %13f %13f\n", // // p+1, v.DriverName, v.LapPct, driversEstTime[p] - driversEstTime[myIdx]) // // } // // <-mainLoopTicker.C // } // }