def __init__(self, *, position): self.body = RigidBody(collider=CircleCollider, position=position, radius=20, damping=3.5, is_player=True) self.sprite = CircleSprite(colors.BLACK, self.body.collider.radius) self.layer = layers.PLAYER self.on_move = Event("move") self.on_fire = Event("fire") self.on_heal = Event("heal") self.on_damage = Event("damage") self.on_enemy_kill = Event("enemy_kill") self.on_acquire_item = Event("acquire_item") self.on_stat_change = Event("stat_change") self.on_update += register_keys self.on_update += move self.on_update += fire self.on_update += bomb_place self.on_stat_change += update_pickups self.health = PlayerHealth(heart_canisters=3, player=self) self.can_shoot = True self.can_place_bomb = True self.invulnerable = False self.items = []
def __init__(self, position): self.body = RigidBody(collider=RectCollider, position=position, size=(TILE_SIZE, TILE_SIZE), mass=0) self.sprite = RectSprite(colors.BLACK, self.body.collider.size()) self.layer = layers.OBSTACLES
def get_input(): mouse_buttons = pygame.mouse.get_pressed() global mouse_pos mouse_pos = pygame.mouse.get_pos() for event in pygame.event.get(): if event.type == QUIT: return False elif event.type == KEYDOWN: if event.key == K_ESCAPE: return False elif event.type == pygame.MOUSEBUTTONUP and mouse_buttons[0]: body = RigidBody(50, 50, screen_center.x, screen_center.y, angle=random.randint(0, 90)) world.add(body) body.velocity = Vector2D(mouse_pos) - screen_center return True
def __init__(self, *, position): super().__init__(health=100.0) self.body = RigidBody(collider=CircleCollider, position=position, radius=10, mass=1, damping=2) self.sprite = CircleSprite(colors.DARK_RED, self.body.collider.radius) self.speed = 300 self.on_update += fly_ai
def __init__(self, position, sprite, **kwargs): self.body = RigidBody(collider=CircleCollider, position=position, radius=10, mass=.2) self.sprite = sprite self.layer = layers.PICKUPS def do_pickup(self, player): if not self.action(player): self.kill() self.on_collide += do_pickup
def __init__(self, direction): position = Door.positions[direction] size = Wall.horizontal_size if direction in ( DOWN, UP) else Wall.vertical_size self.body = RigidBody(collider=RectCollider, position=position, size=size, mass=0) self.sprite = RectSprite(colors.BLACK, size) self.layer = layers.OBSTACLES self.direction = direction
def __init__(self, *, blast_radius=80, delay=3, damage=100, position): self.body = RigidBody(collider=CircleCollider, position=position, radius=10, mass=.5) self.sprite = CircleSprite(colors.DARK_GRAY, 10) self.layer = layers.OBSTACLES self.on_mount += bomb_mounted self.on_kill += bomb_explode self.body.disable_collide = True self.delay = delay self.blast_radius = blast_radius self.damage = damage
def __init__(self, *, position, item=None, pool=None): self.body = RigidBody(collider=CircleCollider, position=position, radius=20, mass=0) self.sprite = CircleSprite(colors.YELLOW, 20) self.layer = layers.OBSTACLES if item is not None: self.item = item else: self.item = pools[pool].get() self.on_collide += pedestal_collide
def __init__(self, direction): position = Door.positions[direction] size = Door.size if direction in (DOWN, UP) else Door.size[::-1] self.body = RigidBody(collider=RectCollider, position=position, size=size, mass=0) self.sprite = RectSprite(colors.WHITE, size) self.layer = layers.OBSTACLES self.direction = direction self.enabled = True self.on_collide += enter_door self.on_mount += door_mount
from pygame.locals import * from vectors import Vector2D from physics import PhysicsWorld, RigidBody pygame.display.init() pygame.font.init() pygame.display.set_caption("Simple physics example") default_font = pygame.font.Font(None, 24) screen_size = (1280, 768) game_surface = pygame.display.set_mode(screen_size) clock = pygame.time.Clock() world = PhysicsWorld() world.add( RigidBody(100, 100, 100, 100, mass=inf), RigidBody(100, 100, screen_size[0] - 100, 100, mass=inf), RigidBody(100, 100, screen_size[0] - 100, screen_size[1] - 100, mass=inf), RigidBody(100, 100, 100, screen_size[1] - 100, mass=inf), ) screen_center = Vector2D(screen_size) / 2 mouse_pos = screen_center def get_input(): mouse_buttons = pygame.mouse.get_pressed() global mouse_pos mouse_pos = pygame.mouse.get_pos() for event in pygame.event.get(): if event.type == QUIT: