import pygame as pg from math import pi from rigidbody import * from collider import RectCollider from tools import debug class Ball: def __init__(self, transform: Transform, radius: float): self.transform = transform self.radius = radius self.surface = pg.Surface((2*self.radius, 2*self.radius), pg.SRCALPHA) self.surface.fill((255,255,255,0)) pg.draw.circle( self.surface, color=(0,255,0,255), center=(self.radius,self.radius), radius=self.radius ) def draw(self, screen: pg.Surface): surface = pg.transform.rotate(self.surface, self.transform.global_degrees) screen.blit(surface, self.transform.global_position - pg.Vector2(self.radius, self.radius)) class Square: def __init__(self, transform: Transform, side: float, color=(255,0,0,255)): self.transform = transform self.side = side self.surface = pg.Surface((side, side), pg.SRCALPHA) self.surface.fill((255,255,255,0)) pg.draw.rect( self.surface, color=color, rect=pg.Rect(0, 0, self.side, self.side) ) def draw(self, screen: pg.Surface): surface = pg.transform.rotate(self.surface, -self.transform.global_degrees) screen.blit(surface, self.transform.global_position - pg.Vector2(self.side / 2.0, self.side / 2.0)) def main(): running=True pg.init() clock=pg.time.Clock() screen = pg.display.set_mode((500,500)) debug.enabled = True debug._screen = screen physics = PhysicsSystem() linecollider = RectCollider((495, 1)) ball_transform = Transform(position=pg.Vector2(250,440), rotation=pi/8.0) square_transform = Transform(position=pg.Vector2(250, 460)) #ball2_transform = Transform(position=pg.Vector2(250, 50)) ball = Square(ball_transform, 20) ball2 = Square(square_transform, 20, color=(0,255,0,255)) #ball3 = Ball(ball2_transform, 10) physics.add_body( RigidBody( ball_transform, RectCollider((20,20)), velocity=pg.Vector2(0,-400), restitution=0.2, coef_friction=0.4 ) ) """physics.add_body( RigidBody( ball2_transform, CircleCollider(20), velocity=pg.Vector2(0,0) ) )""" physics.add_body( RigidBody( square_transform, RectCollider((20,20)), pg.Vector2(0,0), restitution=0.2, coef_friction=0.2 ) ) physics.add_body( RigidBody( Transform(pg.Vector2(250,0)), linecollider, pg.Vector2(0,0), mass=0.0 ) ) physics.add_body( RigidBody( Transform(pg.Vector2(250,500)), linecollider, pg.Vector2(0,0), mass=0.0 ) ) physics.add_body( RigidBody( Transform(pg.Vector2(0,250),rotation=pi/2.0), linecollider, pg.Vector2(0,0), mass=0.0 ) ) physics.add_body( RigidBody( Transform(pg.Vector2(500,250),rotation=pi/2), linecollider, pg.Vector2(0,0), mass=0.0 ) ) while running: dt = clock.tick(144) / 1000 screen.fill((0,0,0,0)) physics.update(dt) ball.draw(screen) ball2.draw(screen) debug.debug() #ball3.draw(screen) pg.display.flip() for event in pg.event.get(): if event.type == pg.QUIT: running = False if __name__ == "__main__": main()