diff options
| author | raven <citrons@mondecitronne.com> | 2026-03-23 18:53:14 -0500 |
|---|---|---|
| committer | raven <citrons@mondecitronne.com> | 2026-03-24 12:45:51 -0500 |
| commit | 31fa67112ccd9eeabf31ca20e10e5956c1f6ff38 (patch) | |
| tree | 465629ca70ff1faca524f46591346a05a10eb0b4 /server/player.go | |
| parent | b8d39a6ac1c7a85bb2f48f594d9b0a8f9d8dce42 (diff) | |
optimized level data structure
Diffstat (limited to 'server/player.go')
| -rw-r--r-- | server/player.go | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/server/player.go b/server/player.go index 9852833..bba6539 100644 --- a/server/player.go +++ b/server/player.go @@ -5,6 +5,7 @@ import ( "os" "fmt" "regexp" + "slices" "strings" "git.citrons.xyz/metronode/phony" "git.citrons.xyz/metronode/classic" @@ -230,7 +231,7 @@ func (p *player) GetInfo(from phony.Actor, func (p *player) SendMessage(from phony.Actor, message string) { p.Act(from, func() { - p.client.SendPackets(p, processChatMessage(message)) + p.client.SendPackets(p, slices.Values(processChatMessage(message))) }) } @@ -248,27 +249,26 @@ func (p *player) OnCommandError(from *Server, err string) { func (p *player) OnLevelData(from *level, info levelInfo, data io.ReadCloser) { p.Act(from, func() { - defer data.Close() if from != p.level { return } - var packets []classic.Packet - for { - var packet classic.LevelDataChunk - n, err := io.ReadFull(data, packet.Data[:]) - if err == io.EOF || err == io.ErrUnexpectedEOF { - if n == 0 { - break + packets := func(yield func(classic.Packet) bool) { + defer data.Close() + for { + var packet classic.LevelDataChunk + n, err := io.ReadFull(data, packet.Data[:]) + if err == io.EOF || err == io.ErrUnexpectedEOF { + if n == 0 { + break + } + } else if err != nil { + panic(err) + } + packet.Length = int16(n) + if !yield(&packet) { + return } - } else if err != nil { - panic(err) } - packet.Length = int16(n) - packets = append(packets, &packet) - } - for i := 0; i < len(packets); i++ { - chunk := packets[i].(*classic.LevelDataChunk) - chunk.PercentComplete = byte(i * 100 / len(packets)) } p.client.SendPackets(p, packets) p.client.SendPacket(p, &classic.LevelFinalize { |
