/src/Main/Player.py

https://github.com/karimForza/Orion-avec-cheveux · Python · 124 lines · 102 code · 13 blank · 9 comment · 28 complexity · 6541914815c910307f2c634508972599 MD5 · raw file

  1. import Unit as u
  2. from Flag import *
  3. import socket
  4. #Represente un joueur
  5. class Player():
  6. def __init__(self, name, id , colorId, civilization=None):
  7. self.name = name
  8. self.civilization = civilization
  9. self.colorId = colorId
  10. self.selectedObjects = [] #Liste des unites selectionnes
  11. self.units = [] #Liste de toute les unites
  12. self.id = id #Numero du joueur dans la liste de joueur
  13. self.startPos = [0,0,0] #Position de depart du joueur (pour le mothership)
  14. self.formation="carre"
  15. self.currentPlanet = None
  16. self.gaz = 100
  17. self.mineral = 100
  18. def addBaseUnits(self, startPos):
  19. self.units.append(u.Mothership('Mothership',startPos, self.id))
  20. self.units.append(u.Unit('Scout',[startPos[0] + 20, startPos[1] + 20 ,0], self.id, moveSpeed=4.0))
  21. self.units.append(u.Unit('Scout',[startPos[0] - 20, startPos[1] - 20 ,0], self.id, moveSpeed=4.0))
  22. self.units.append(u.Unit('Scout',[startPos[0] + 20, startPos[1] + 20 ,0], self.id, moveSpeed=4.0))
  23. self.units.append(u.Unit('Scout',[startPos[0] - 20, startPos[1] - 20 ,0], self.id, moveSpeed=4.0))
  24. self.units.append(u.Unit('Scout',[startPos[0] + 20, startPos[1] + 20 ,0], self.id, moveSpeed=4.0))
  25. self.units.append(u.Unit('Scout',[startPos[0] - 20, startPos[1] - 20 ,0], self.id, moveSpeed=4.0))
  26. self.units.append(u.TransportShip('Transport', [startPos[0], startPos[1] + 30,0], self.id, moveSpeed=3.0))
  27. self.units.append(u.SpaceAttackUnit('Attack',[startPos[0] + 30, startPos[1] - 30 ,0], self.id, moveSpeed=2.0, attackspeed=10.0,attackdamage=5.0,range=150.0))
  28. #Ajoute une camera au joueur seulement quand la partie commence
  29. def addCamera(self, galaxy, taille):
  30. pos = [0,0,0]
  31. for i in self.units:
  32. if i.name == 'Mothership':
  33. pos = i.position
  34. default = [pos[0],pos[1]]
  35. self.camera = Camera(default,galaxy, taille)
  36. if default[0]-self.camera.screenCenter[0] < (self.camera.galaxy.width*-1)/2:
  37. self.camera.position[0] = (self.camera.galaxy.width*-1)/2+self.camera.screenCenter[0]
  38. if default[0]+self.camera.screenCenter[0] > self.camera.galaxy.width/2:
  39. self.camera.position[0] = (self.camera.galaxy.width)/2-self.camera.screenCenter[0]
  40. if default[1]-self.camera.screenCenter[1] < (self.camera.galaxy.height*-1)/2:
  41. self.camera.position[1] = (self.camera.galaxy.height*-1)/2+self.camera.screenCenter[1]
  42. if default[1]+self.camera.screenCenter[1] > self.camera.galaxy.height/2:
  43. self.camera.position[1] = (self.camera.galaxy.height)/2-self.camera.screenCenter[1]
  44. def inViewRange(self, position):
  45. x = position[0]
  46. y = position[1]
  47. for i in self.units:
  48. if i.isAlive:
  49. if x > i.position[0]-i.viewRange and x < i.position[0]+i.viewRange:
  50. if y > i.position[1]-i.viewRange and y < i.position[1]+i.viewRange:
  51. return True
  52. return False
  53. #Represente la camera
  54. class Camera():
  55. def __init__(self, defaultPos, galaxy, taille):
  56. self.defaultPos = defaultPos
  57. self.position = defaultPos
  58. self.screenCenter = (taille/2,(taille/2)-100)
  59. self.screenWidth = taille
  60. self.screenHeight = taille-200
  61. self.galaxy = galaxy #reference a la galaxie
  62. self.movingDirection = []
  63. #Pour calculer la distance entre la camera et un point
  64. def calcDistance(self, position):
  65. distX = position[0] - self.position[0]
  66. distY = position[1] - self.position[1]
  67. return [distX+self.screenCenter[0], distY+self.screenCenter[1]]
  68. #Pour calculer un point dans la galaxie a partir d'un point dans l'ecran
  69. def calcPointInWorld(self, x,y):
  70. dist = self.calcDistance([x,y])
  71. rX = self.position[0]-self.screenCenter[0]+x
  72. rY = self.position[1]-self.screenCenter[1]+y
  73. return [rX,rY,0]
  74. #Pour calculer un point sur la minimap a partir d'un point dans l'espace
  75. def calcPointOnMap(self, x, y):
  76. rX = x/200 * self.galaxy.width - self.galaxy.width/2
  77. rY = y/200 * self.galaxy.height - self.galaxy.height/2
  78. if rX < 0-self.galaxy.width/2+self.screenWidth/2:
  79. rX = 0-self.galaxy.width/2+self.screenWidth/2
  80. elif rX > self.galaxy.width/2-self.screenWidth/2:
  81. rX = self.galaxy.width/2-self.screenWidth/2
  82. if rY < 0-self.galaxy.height/2+self.screenHeight/2:
  83. rY = 0-self.galaxy.height/2+self.screenHeight/2
  84. elif rY > self.galaxy.height/2-self.screenHeight/2:
  85. rY = self.galaxy.height/2-self.screenHeight/2
  86. return [rX, rY]
  87. #Pour calculer un point dans la galaxie a partir d'un point dans la minimap
  88. def calcPointMinimap(self,x ,y ):
  89. rX = x/200 * self.galaxy.width - self.galaxy.width/2
  90. rY = y/200 * self.galaxy.height - self.galaxy.height/2
  91. return [rX, rY]
  92. #Retourne Vrai si la position est visible par la camera en ce moment
  93. def isInFOV(self, position):
  94. if position[0] > self.position[0]-self.screenWidth/2-20 and position[0] < self.position[0]+self.screenWidth/2+20:
  95. if position[1] > self.position[1]-self.screenHeight/2-20 and position[1] < self.position[1]+self.screenHeight/2+20:
  96. return True
  97. return False
  98. #Deplace la camera selon le contenu de la liste movingDirection
  99. def move(self):
  100. if 'LEFT' in self.movingDirection:
  101. if self.position[0] > (self.galaxy.width*-1)/2+self.screenCenter[0]:
  102. self.position[0]-=10
  103. elif 'RIGHT' in self.movingDirection:
  104. if self.position[0] < self.galaxy.width/2 - self.screenCenter[0]:
  105. self.position[0]+=10
  106. if 'UP' in self.movingDirection:
  107. if self.position[1] > (self.galaxy.height*-1)/2 + self.screenCenter[1]:
  108. self.position[1]-=10
  109. elif 'DOWN' in self.movingDirection:
  110. if self.position[1] < self.galaxy.height/2 - self.screenCenter[1]:
  111. self.position[1]+=10