mirror of
https://github.com/jwetzell/psn-go.git
synced 2026-08-05 07:27:51 +00:00
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"math"
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/jwetzell/psn-go"
|
|
)
|
|
|
|
func main() {
|
|
client, err := net.Dial("udp", "236.10.10.10:56565")
|
|
if err != nil {
|
|
fmt.Printf("Error %v\n", err)
|
|
return
|
|
}
|
|
|
|
encoder := psn.Encoder{
|
|
SystemName: "Test PSN Server",
|
|
VersionHigh: 2,
|
|
VersionLow: 0,
|
|
}
|
|
|
|
trackers := []psn.Tracker{}
|
|
|
|
trackers = append(trackers, psn.Tracker{Id: 0, Name: "Sun"})
|
|
trackers = append(trackers, psn.Tracker{Id: 1, Name: "Mercury"})
|
|
trackers = append(trackers, psn.Tracker{Id: 2, Name: "Venus"})
|
|
trackers = append(trackers, psn.Tracker{Id: 3, Name: "Earth"})
|
|
trackers = append(trackers, psn.Tracker{Id: 4, Name: "Mars"})
|
|
trackers = append(trackers, psn.Tracker{Id: 5, Name: "Jupiter"})
|
|
trackers = append(trackers, psn.Tracker{Id: 6, Name: "Saturn"})
|
|
trackers = append(trackers, psn.Tracker{Id: 7, Name: "Uranus"})
|
|
trackers = append(trackers, psn.Tracker{Id: 8, Name: "Neptune"})
|
|
trackers = append(trackers, psn.Tracker{Id: 9, Name: "Pluto"})
|
|
|
|
orbits := []float32{1.0, 88.0, 224.7, 365.2, 687, 4332, 10760, 30700, 60200, 90600}
|
|
distFromSun := []float32{0, 0.58, 1.08, 1.5, 2.28, 7.78, 14.29, 28.71, 45.04, 59.13}
|
|
|
|
timestamp := 0
|
|
|
|
lastInfoMillis := time.Now().UnixMilli()
|
|
lastDataMillis := time.Now().UnixMilli()
|
|
|
|
for {
|
|
if (time.Now().UnixMilli() - lastInfoMillis) > 500 {
|
|
slog.Info("Sending Info Packets")
|
|
infoPackets := encoder.GetInfoPackets(uint64(timestamp), trackers)
|
|
for _, infoPacket := range infoPackets {
|
|
client.Write(infoPacket)
|
|
}
|
|
lastInfoMillis = time.Now().UnixMilli()
|
|
}
|
|
|
|
if (time.Now().UnixMilli() - lastDataMillis) > 5 {
|
|
for index, orbit := range orbits {
|
|
a := 1.0 / orbit
|
|
b := distFromSun[index]
|
|
x := timestamp
|
|
cb := math.Cos(float64(a*float32(x))) * float64(b)
|
|
sb := math.Sin(float64(a*float32(x))) * float64(b)
|
|
|
|
trackers[index].SetPos(float32(sb), 0, float32(cb))
|
|
trackers[index].SetSpeed(a*float32(cb), 0, -a*float32(sb))
|
|
trackers[index].SetOri(0, float32(x)/1000.0, 0)
|
|
trackers[index].SetAccel(-a*a*float32(sb), 0, -a*a*float32(cb))
|
|
trackers[index].SetTrgtPos(3, 14, 16)
|
|
trackers[index].SetStatus(float32(index) / 10.0)
|
|
trackers[index].SetTimestamp(uint64(timestamp))
|
|
}
|
|
|
|
slog.Info("Sending Data Packets")
|
|
dataPackets := encoder.GetDataPackets(uint64(timestamp), trackers)
|
|
for _, DataPacket := range dataPackets {
|
|
client.Write(DataPacket)
|
|
}
|
|
lastDataMillis = time.Now().UnixMilli()
|
|
timestamp += 1
|
|
}
|
|
|
|
}
|
|
}
|