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)}) } } } } }