You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.7 KiB

import pygame
import pymunk
from common.drawableItem import DrawableItem
from common.game.billiards.baseBilliard import BaseBilliard
from common.game.billiards.cueBall import CueBall
from common.game.gameData import GameData
from config.sys import CUE_LENGTH, CUE_WIDTH, BALL_RADIUS
from enums.color import BLACK, WHITE
class Cue(DrawableItem):
def __init__(self, cue_ball: CueBall, game_data: GameData):
self.__cue_ball = cue_ball
self.__mouse_pos: tuple[float, float] = (0, 0)
self.__game_data = game_data
pass
def draw(self, window: pygame.Surface):
if not self.__cue_ball:
return
if not self.__game_data.is_stable():
return
cue_ball_pos = self.__cue_ball.pos
mouse_pos = pymunk.Vec2d(self.__mouse_pos[0], self.__mouse_pos[1])
cue_vector_x = (self._get_relative_pos(cue_ball_pos) - mouse_pos)[0]
cue_vector_y = (self._get_relative_pos(cue_ball_pos) - mouse_pos)[1]
cue_vector = pymunk.Vec2d(cue_vector_x, cue_vector_y).scale_to_length(CUE_LENGTH)
pygame.draw.line(window, WHITE, self._get_relative_pos(cue_ball_pos),
mouse_pos - (mouse_pos - self._get_relative_pos(cue_ball_pos)).scale_to_length(BALL_RADIUS), 1)
pygame.draw.circle(window, WHITE, mouse_pos, BALL_RADIUS, 1)
pygame.draw.line(window, BLACK, self._get_relative_pos(cue_ball_pos),
self._get_relative_pos(cue_ball_pos) + cue_vector, CUE_WIDTH)
pass
@property
def mouse_pos(self):
return self.__mouse_pos
@mouse_pos.setter
def mouse_pos(self, mouse_pos):
self.__mouse_pos = mouse_pos