OtherPlayerEntity.lua 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. local OtherPlayerEntity = class("OtherPlayerEntity", require("PlayerEntity"))
  2. local OtherPlayerEntityView = require("OtherPlayerEntityView")
  3. function OtherPlayerEntity:ctor()
  4. self.targetPos = Vector3.New()
  5. end
  6. function OtherPlayerEntity:Dispose()
  7. self.targetPos = nil
  8. OtherPlayerEntity.super.Dispose(self)
  9. end
  10. function OtherPlayerEntity:EnterMap()
  11. self.view = OtherPlayerEntityView:new(self.uid, self.pos, self.rot)
  12. OtherPlayerEntity.super.EnterMap(self)
  13. end
  14. function OtherPlayerEntity:SynPosition(pos)
  15. if self.targetPos:Equals(pos) then
  16. return
  17. end
  18. self.targetPos:Set(pos.x, pos.y, pos.z)
  19. if self.pos:Equals(pos) then
  20. self:StopMove()
  21. return
  22. end
  23. local moveDir = self.targetPos - self.pos
  24. moveDir.y = 0
  25. local distance = moveDir.magnitude
  26. if distance <= 1e-5 then
  27. self.pos:Set(pos.x, pos.y, pos.z)
  28. self:StopMove()
  29. return
  30. end
  31. moveDir:SetNormalize()
  32. local moveSpeed = distance / self:GetSyncPosIntervalTime()
  33. local moveState = self:GetMoveStateBySpeed(moveSpeed)
  34. moveSpeed = self:GetMoveSpeed(moveState)
  35. self.moveState = moveState
  36. self.moveSpeed = moveSpeed
  37. self.moveDir = moveDir
  38. self.moveRot = Quaternion.LookRotation(moveDir)
  39. end
  40. function OtherPlayerEntity:Update(deltaTime)
  41. if self.moveState > 0 then
  42. if self.pos:Equals(self.targetPos) then
  43. self:StopMove()
  44. else
  45. self.pos = Vector3.MoveTowards( self.pos, self.targetPos, deltaTime * self.moveSpeed )
  46. self.rot = Quaternion.Slerp(self.rot, self.moveRot, self:GetTurnSpeed() * deltaTime)
  47. end
  48. end
  49. OtherPlayerEntity.super.Update(self, deltaTime)
  50. end
  51. return OtherPlayerEntity