go-susapp/movementprocessor.go

42 lines
1.8 KiB
Go
Raw Normal View History

2021-09-12 00:25:10 +01:00
package main
import (
"codehub.onpointcoding.net/sean/go-susapp/enum"
"codehub.onpointcoding.net/sean/go-susapp/gamedata"
"codehub.onpointcoding.net/sean/go-susapp/innernetobjects"
"codehub.onpointcoding.net/sean/go-susapp/packets"
"codehub.onpointcoding.net/sean/go-susapp/protocol"
)
type MovementProcessor struct {
sus *SusApp
}
func (proc *MovementProcessor) Tick(delta int64) {
if proc.sus.state.CurrentGame != nil && proc.sus.networkHandler != nil {
p := protocol.NewEmptyPacket()
cp, ok := proc.sus.state.CurrentGame.PlayerNetObjects.ByPlayerNetID[proc.sus.state.CurrentGame.ClientPlayerNetID]
if ok {
netId := cp.PlayerNetworkTransform
var c0 innernetobjects.InnerNetObject = *proc.sus.state.CurrentGame.NetObjects[netId]
a, ok := c0.(*innernetobjects.PlayerNetworkTransform)
if ok {
a.LastSequenceID++
prevVelocityZero := a.TargetVelocity.X == 0 && a.TargetVelocity.Y == 0
a.TargetVelocity.X = enum.PLAYER_SPEED * proc.sus.state.CurrentGame.GameOptions.PlayerSpeedModifier * proc.sus.state.MovementX / 2
a.TargetVelocity.Y = enum.PLAYER_SPEED * proc.sus.state.CurrentGame.GameOptions.PlayerSpeedModifier * proc.sus.state.MovementY / 2
nextVelocityZero := a.TargetVelocity.X == 0 && a.TargetVelocity.Y == 0
if !nextVelocityZero || prevVelocityZero != nextVelocityZero {
a.TargetPosition.X += a.TargetVelocity.X * (float32(delta) / 1000)
a.TargetPosition.Y -= a.TargetVelocity.Y * (float32(delta) / 1000)
c0.Write(p, false)
var c1 protocol.UpdateComponent = protocol.UpdateComponent{NetID: netId, RawData: p}
var c2 packets.GameDataSubpacket = &gamedata.DataH2G{Component: &c1}
var c3 protocol.HazelPayload = packets.NewGameDataSingleSubpacket(proc.sus.state.CurrentGame.GameID, &c2)
proc.sus.networkHandler.SendNormalPacket([]*protocol.Hazel{protocol.NewHazelFromPayload(&c3)})
}
}
}
}
}