예제 #1
0
파일: player.py 프로젝트: Sponja-/Isaac
    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 = []
예제 #2
0
    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
예제 #3
0
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
예제 #4
0
파일: enemy.py 프로젝트: Sponja-/Isaac
    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
예제 #5
0
파일: pickups.py 프로젝트: Sponja-/Isaac
    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
예제 #6
0
파일: rooms.py 프로젝트: Sponja-/Isaac
    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
예제 #7
0
파일: bombs.py 프로젝트: Sponja-/Isaac
    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
예제 #8
0
파일: items.py 프로젝트: Sponja-/Isaac
    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
예제 #9
0
파일: rooms.py 프로젝트: Sponja-/Isaac
    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
예제 #10
0
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: