Guest User

Untitled

a guest
May 21st, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. import asyncio
  2. import json
  3. import math
  4. import random
  5. import sys
  6. import os
  7. import bullet_classes
  8. import player_classes
  9. import time
  10.  
  11. from quart import Quart, websocket, render_template
  12. from functools import wraps
  13.  
  14. Players = [player_classes.Hill()]
  15. clientIds = []
  16. playerNumber = 0
  17. connected = set()
  18. ids = []
  19.  
  20. def collect_websocket(func):
  21. @wraps(func)
  22. async def wrapper(*args, **kwargs):
  23. global connected
  24. connected.add(websocket._get_current_object())
  25.  
  26. clientIds.append(player_classes.ID(websocket._get_current_object(), 0))
  27. for IDS in clientIds:
  28. if(IDS.ws == websocket._get_current_object()):
  29. ids.append(str(IDS.id))
  30.  
  31.  
  32. try:
  33. return await func(*args, **kwargs)
  34.  
  35. finally:
  36.  
  37. for Player in Players:
  38. if(Player.id != 1):
  39. if(Player.id != 50):
  40. if(Player.ws == websocket):
  41. connected.remove(websocket._get_current_object())
  42. Player.alive = 0
  43. for ID in clientIds:
  44. clientIds.remove(ID)
  45.  
  46.  
  47.  
  48. return wrapper
  49.  
  50.  
  51. app = Quart(__name__)
  52.  
  53. @app.route("/")
  54. async def index():
  55. return await render_template('index.html')
  56.  
  57.  
  58.  
  59.  
  60.  
  61. @app.websocket('/ws')
  62. @collect_websocket
  63. async def ws():
  64. global connected
  65. global rData
  66.  
  67.  
  68. while True:
  69.  
  70.  
  71. PlayerData = {}
  72.  
  73. for Player in Players:
  74. if(Player.id > 50):
  75. PlayerData['playerx' + str(Player.id)] = Player.x
  76. PlayerData['playery' + str(Player.id)] = Player.y
  77.  
  78.  
  79. PlayerData['playera' + str(Player.id)] = int(Player.angle)
  80.  
  81.  
  82. PlayerData['playerstat' + str(Player.id)] = Player.alive
  83.  
  84. if(Player.id != 1):
  85. if(Player.id != 50):
  86. if(Player.alive == 0):
  87. Players.remove(Player)
  88.  
  89. for ID in clientIds:
  90. PlayerData['id'] = str(clientIds[len(clientIds) - 1].id)
  91.  
  92. PlayerData['players'] = ids
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. PlayerJsonData = json.dumps(PlayerData)
  105. await websocket.send(PlayerJsonData)
  106. recivedData = await websocket.receive()
  107. rData = json.loads(recivedData)
  108.  
  109. for ID in clientIds:
  110. if(rData['id'] == str(ID.id)):
  111. if(ID.IG == 0):
  112. if(rData['playerstat'] == 1):
  113. Players.append(player_classes.Basic(-1300, -1300, ID.ws, ID.id, 1))
  114. ID.IG = 1
  115.  
  116.  
  117.  
  118.  
  119. for Player in Players:
  120.  
  121. for Player2 in Players:
  122. if(Player.id > 50):
  123. Player.detect_collide(Player2)
  124.  
  125.  
  126.  
  127.  
  128. if(rData['id'] == str(Player.id)):
  129. if(rData['direction'] == "up"):
  130. Player.accelerate(rData['direction'])
  131. Player.moveUp(Player2)
  132.  
  133. if(rData['direction'] == "left"):
  134. Player.accelerate(rData['direction'])
  135. Player.moveLeft(Player2)
  136.  
  137. if(rData['direction'] == "down"):
  138. Player.accelerate(rData['direction'])
  139. Player.moveDown(Player2)
  140.  
  141. if(rData['direction'] == "right"):
  142. Player.accelerate(rData['direction'])
  143. Player.moveRight(Player2)
  144.  
  145.  
  146. if(rData['direction'] == "none"):
  147. Player.decelerate(rData['direction'])
  148.  
  149.  
  150.  
  151.  
  152.  
  153. if(rData['id'] == str(Player.id)):
  154. if(rData['shootq'] == 1):
  155. Players.append(bullet_classes.basicBullet(Player.x, Player.y, Player.angle, Player.id + 100))
  156. if(Player.id == 1):
  157. Player.fire()
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. if __name__ == '__main__':
  168. app.run(host='0.0.0.0', port=os.environ.get('PORT', '5000'))
Add Comment
Please, Sign In to add comment