UPDATE: New rendering method, using real CS2 data, less guessing, more accuracy.
REMOVE: Image coord controller
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
from utils.utils import mapped_value
|
||||
import math
|
||||
|
||||
class ImageCoordController:
|
||||
def __init__(self, image_width, image_height, screen_width, screen_height, ingame_zero_x, ingame_zero_y):
|
||||
self.image_width = image_width
|
||||
self.image_height = image_height
|
||||
self.ingame_zero_x = ingame_zero_x
|
||||
self.ingame_zero_y = ingame_zero_y
|
||||
|
||||
self.screen_width = screen_width
|
||||
self.screen_height = screen_height
|
||||
|
||||
self.screen_middle_x = screen_width / 2
|
||||
self.screen_middle_y = screen_height / 2
|
||||
|
||||
self.scaler = 1.0
|
||||
self.rotation_degrees = 0
|
||||
|
||||
def scale(self, scaler):
|
||||
self.scaler = scaler
|
||||
|
||||
def rotate(self, degree):
|
||||
## validate for multiples of 90 degrees and convert to 0-360
|
||||
if degree % 90 != 0:
|
||||
raise ValueError("Degree v must be a multiple of 90")
|
||||
self.rotation_degrees = degree % 360
|
||||
|
||||
def top_left_screen(self):
|
||||
if self.rotation_degrees == 0:
|
||||
x = self.screen_middle_x - (self.ingame_zero_x * self.scaler)
|
||||
y = self.screen_middle_y - (self.ingame_zero_y * self.scaler)
|
||||
elif self.rotation_degrees == 270:
|
||||
x = self.screen_middle_x - ((self.image_width - self.ingame_zero_y) * self.scaler)
|
||||
y = self.screen_middle_y - (self.ingame_zero_x * self.scaler)
|
||||
elif self.rotation_degrees == 180:
|
||||
x = self.screen_middle_x - ((self.image_width - self.ingame_zero_x) * self.scaler)
|
||||
y = self.screen_middle_y - ((self.image_height - self.ingame_zero_y) * self.scaler)
|
||||
elif self.rotation_degrees == 90:
|
||||
x = self.screen_middle_x - (self.ingame_zero_y * self.scaler)
|
||||
y = self.screen_middle_y - ((self.image_height - self.ingame_zero_x) * self.scaler)
|
||||
return x, y
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
'''
|
||||
ingame zero maps to 0,0,0 in game, and needs to map to middle of pygame window
|
||||
|
||||
'''
|
||||
if __name__ == "__main__":
|
||||
image_coord_controller = ImageCoordController(1024, 1024, 640, 360)
|
||||
image_coord_controller.scale(4)
|
||||
print(image_coord_controller.image_to_screen(0,0))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,23 @@
|
||||
{
|
||||
"middle_x": 650,
|
||||
"middle_y": 340,
|
||||
"scale": 0.6,
|
||||
"rotation": 270,
|
||||
"image_path": "maps/de_mirage.png",
|
||||
"image_width": 1024,
|
||||
"image_height": 1024
|
||||
"material": "maps/de_mirage.png",
|
||||
"pos_x": -3230,
|
||||
"pos_y": 1713,
|
||||
"scale": 5.00,
|
||||
"rotate": 0,
|
||||
"zoom": 0,
|
||||
|
||||
"CTSpawn_x": "0.28",
|
||||
"CTSpawn_y": "0.70",
|
||||
"TSpawn_x": "0.87",
|
||||
"TSpawn_y": "0.36",
|
||||
|
||||
"bombA_x": "0.54",
|
||||
"bombA_y": "0.76",
|
||||
"bombB_x": "0.23",
|
||||
"bombB_y": "0.28",
|
||||
|
||||
"inset_left": "0.135",
|
||||
"inset_top": "0.08",
|
||||
"inset_right": "0.105",
|
||||
"inset_bottom": "0.08"
|
||||
}
|
||||
@@ -25,8 +25,8 @@ class Match:
|
||||
return
|
||||
|
||||
for player in self.get_players():
|
||||
player.x = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["Y"].values[0]
|
||||
player.y = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["X"].values[0]
|
||||
player.x = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["X"].values[0]
|
||||
player.y = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["Y"].values[0]
|
||||
player.z = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["Z"].values[0]
|
||||
player.pitch = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["pitch"].values[0]
|
||||
player.yaw = self.current_tick[self.current_tick["player_steamid"] == player.steam_id]["yaw"].values[0]
|
||||
|
||||
@@ -5,7 +5,6 @@ from models.match import Match
|
||||
from models.player import Player
|
||||
from models.team import Team
|
||||
from controllers.map_coord_controller import MapCoordController
|
||||
from controllers.image_coord_controller import ImageCoordController
|
||||
from utils.json_object import JSONObject
|
||||
|
||||
class Renderer:
|
||||
@@ -20,23 +19,22 @@ class Renderer:
|
||||
except FileNotFoundError:
|
||||
raise NotImplementedError(f"Map {match.map_name} not implemented.")
|
||||
|
||||
self.image_path = self.json_object.get("image_path")
|
||||
self.image_path = self.json_object.get("image_path")
|
||||
self.image_width = self.json_object.get("image_width")
|
||||
self.image_height = self.json_object.get("image_height")
|
||||
self.ingame_zero_x = self.json_object.get("middle_x")
|
||||
self.ingame_zero_y = self.json_object.get("middle_y")
|
||||
self.rotation_degrees = self.json_object.get("rotation")
|
||||
self.scaler = self.json_object.get("scale")
|
||||
self.top_left_x = self.json_object.get("pos_x")
|
||||
self.top_left_y = self.json_object.get("pos_y")
|
||||
self.scale = self.json_object.get("scale")
|
||||
self.rotation = self.json_object.get("rotate")
|
||||
self.image_path = self.json_object.get("material")
|
||||
|
||||
self.map_image = pygame.image.load(self.image_path)
|
||||
self.image_width = self.map_image.get_width()
|
||||
self.image_height = self.map_image.get_height()
|
||||
|
||||
self.bottom_right_x = self.top_left_x + (self.image_width * self.scale)
|
||||
self.bottom_right_y = self.top_left_y - (self.image_height * self.scale)
|
||||
|
||||
|
||||
self.map_coord_controller = MapCoordController(self.screen.get_width(), self.screen.get_height(),
|
||||
-3000, 3000, -3000, 3000)
|
||||
self.image_coord_controller = ImageCoordController(self.image_width, self.image_height,
|
||||
self.screen.get_width(), self.screen.get_height(),
|
||||
self.ingame_zero_x, self.ingame_zero_y)
|
||||
self.image_coord_controller.scale(self.scaler)
|
||||
self.image_coord_controller.rotate(self.rotation_degrees)
|
||||
|
||||
self.top_left_x, self.bottom_right_x, self.top_left_y, self.bottom_right_y)
|
||||
def render_players(self):
|
||||
"""Draws everything on screen."""
|
||||
for player in self.match.get_players():
|
||||
@@ -61,15 +59,11 @@ class Renderer:
|
||||
self.screen.blit(text, (10, 40))
|
||||
|
||||
def render_map(self):
|
||||
# Draw map from image
|
||||
map_image = pygame.image.load(self.image_path)
|
||||
|
||||
# Scale and rotate map image
|
||||
map_image = pygame.transform.scale(map_image, (self.image_width*self.scaler, self.image_height*self.scaler))
|
||||
map_image = pygame.transform.rotate(map_image, self.rotation_degrees)
|
||||
self.map_image = pygame.transform.scale(self.map_image, (self.screen.get_width(), self.screen.get_height()))
|
||||
|
||||
# Draw map image
|
||||
self.screen.blit(map_image, self.image_coord_controller.top_left_screen())
|
||||
self.screen.blit(self.map_image, (0, 0))
|
||||
|
||||
'''
|
||||
def render_slider(self):
|
||||
|
||||
Reference in New Issue
Block a user