Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.88 KB | None | 0 0
  1. extends KinematicBody
  2.  
  3. const SPEED = 6
  4. const GRAVITY = 20
  5.  
  6. var velocity = Vector3()
  7. var movedir = Vector3()
  8.  
  9. onready var camera = $Camera
  10.  
  11. var queue = []
  12. var time = 0
  13. var server_transform
  14. var server_queue = []
  15. var server_timestamp = 0
  16.  
  17. func get_movedir():
  18.     movedir = Vector3(0,0,0)
  19.  
  20.     movedir += camera.global_transform.basis.z * (-int(Input.is_action_pressed("up")) + int(Input.is_action_pressed("down")))
  21.     movedir += camera.global_transform.basis.x * (-int(Input.is_action_pressed("left")) + int(Input.is_action_pressed("right")))
  22.    
  23.     movedir.y = 0
  24.     movedir = movedir.normalized()
  25.  
  26. func _physics_process(delta):
  27.     # CLIENT
  28.     if is_network_master():
  29.         camera.current = true
  30.  
  31.         get_movedir()
  32.        
  33.         append_queue()
  34.        
  35.         move(movedir)
  36.        
  37.         rpc_unreliable_id(1, "send_input", movedir, time)
  38.        
  39.         if server_transform:
  40.             global_transform.origin = global_transform.origin.linear_interpolate(server_transform, 0.2)
  41.            
  42.             while queue.size() > 0:
  43.                 if queue[0].timestamp >= server_timestamp:
  44.                     move(queue[0].movedir)
  45.                 queue.pop_front()
  46.    
  47.     # SERVER
  48.     if get_tree().is_network_server():
  49.        
  50.         while server_queue.size() > 0:
  51.             move(server_queue[0].movedir)
  52.             server_queue.pop_front()
  53.        
  54.         rpc_unreliable("update_player", global_transform.origin)
  55.  
  56. # send input from client to server
  57. remote func send_input(dir, timestamp):
  58.     if timestamp > server_timestamp:
  59.         server_timestamp = timestamp
  60.    
  61.     var new_input = {
  62.         movedir = dir,
  63.         timestamp = timestamp,
  64.     }
  65.    
  66.     server_queue.append(new_input)
  67.  
  68. # sends new transform from server to client
  69. remote func update_player(trans):
  70.     server_transform = trans
  71.  
  72. # basic move w/ no gravity
  73. func move(dir):
  74.     dir *= SPEED
  75.     velocity = move_and_slide(dir, Vector3(0,1,0))
  76.  
  77. # add to client's queue
  78. func append_queue():
  79.     time += 1
  80.    
  81.     var new_input = {
  82.         movedir = movedir,
  83.         timestamp = time,
  84.     }
  85.    
  86.     queue.append(new_input)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement