UPDATE: New rendering method, using real CS2 data, less guessing, more accuracy.

REMOVE: Image coord controller
This commit is contained in:
2025-03-16 17:09:59 +01:00
parent 549872b037
commit c55abfe02e
5 changed files with 40 additions and 93 deletions

View File

@@ -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))

View File

@@ -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"
}

View File

@@ -4,7 +4,7 @@ from models.player import Player
from models.team import Team
from models.renderer import Renderer
WIDTH, HEIGHT = 700, 700
WIDTH, HEIGHT = 700,700
FPS = 60
class Game:

View File

@@ -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]

View File

@@ -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):