Example #1
0
 def __init__(self, display):
     self.display = display
     self.offset = 0
     self.entities = EntityManager()
     prototypes.entities = self.entities
     self.systems = SystemManager(self.entities)
     self.systems.add_system(LinearMotionSystem())
     self.systems.add_system(GravitySystem())
     self.systems.add_system(GroundingSystem())
     self.systems.add_system(DamageSystem())
     self.systems.add_system(CollisionSystem())
     self.systems.add_system(ActorSystem())
     self.drawing_systems = SystemManager(self.entities)
     self.drawing_systems.add_system(DrawingSystem(self.display))
     self.drawing_systems.add_system(DebugDrawingSystem(self.display))
     self.players = (None, None)
     self.lives = [5, 5]
     self.winner = None
     self.player_controllers = resources.get("player_joysticks")
     #resources.get("logfile").write("p1 controller {}\n".format(self.player_controllers[0]))
     #resources.get("logfile").write("that controller id {}\n".format(resources.get("joysticks")[self.player_controllers[0]].get_id()))
     #resources.get("logfile").write("p2 controller {}\n".format(self.player_controllers[1]))
     #resources.get("logfile").write("that controller id {}\n".format(resources.get("joysticks")[self.player_controllers[1]].get_id()))
     self.old_sticks = []
     self.joysticks = [resources.get("joysticks")[resources.get("player_joysticks")[0]], resources.get("joysticks")[resources.get("player_joysticks")[1]]]
     self.maxmin = [0, 0, 0, 0]
     self.logfile = resources.get("logfile")
     self.create_world()
Example #2
0
            def test_system_and_entity_managers_not_changed(
                    self, manager, systems):
                manager2 = SystemManager(sentinel.entity_manager)
                with raises(SystemAlreadyAddedToManagerError):
                    manager2.add_system(systems[0])

                assert systems[0].entity_manager == sentinel.entity_manager
                assert systems[0].system_manager == manager
Example #3
0
            def test_system_and_entity_managers_not_changed(
                    self, manager, systems):
                manager2 = SystemManager(sentinel.entity_manager)
                with raises(SystemAlreadyAddedToManagerError):
                    manager2.add_system(systems[0])

                assert systems[0].entity_manager == sentinel.entity_manager
                assert systems[0].system_manager == manager
Example #4
0
 def test_raises_error(self, manager, systems):
     manager2 = SystemManager(sentinel.entity_manager)
     with raises(SystemAlreadyAddedToManagerError) as exc_info:
         manager2.add_system(systems[0])
     # It's going to format a memory address for each class. We
     # don't care about that.
     assert re.match(
         "System `.*' which belongs to system manager `.*'"
         "attempted to be added to system manager `.*'$",
         str(exc_info.value))
Example #5
0
 def test_raises_error(self, manager, systems):
     manager2 = SystemManager(sentinel.entity_manager)
     with raises(SystemAlreadyAddedToManagerError) as exc_info:
         manager2.add_system(systems[0])
     # It's going to format a memory address for each class. We
     # don't care about that.
     assert re.match(
         "System `.*' which belongs to system manager `.*'"
         "attempted to be added to system manager `.*'$",
         str(exc_info.value))
Example #6
0
 def manager(self, systems):
     sm = SystemManager(sentinel.entity_manager)
     for system in systems:
         sm.add_system(system)
     return sm
def scanner_test():
    w = sf.RenderWindow(sf.VideoMode(400, 400), "Scanner Test")
    clock = sf.Clock()

    em = MyEntityManager()
    sm = SystemManager(em)

    car1 = em.create_entity()
    em.add_component(car1, PositionComponent(0, 0, 0))
    em.add_component(car1, VelocityComponent(0, 0, 0))
    car1_circle = sf.CircleShape()
    car1_circle.radius = 10
    car1_circle.fill_color = sf.Color.RED
    em.add_component(car1, DrawableComponent(car1_circle))
    em.add_component(car1, MovementControlComponent())
    em.add_component(car1, ScanSoundComponent("engine_idle_freesound_loop.wav"))
    car1_engine_sound = PositionSoundComponent("engine_idle_freesound_loop.wav")
    car1_engine_sound.sound.loop = True
    em.add_component(car1, car1_engine_sound)

    player = em.create_entity()
    em.add_component(player, PositionComponent(100, 100, 0))
    em.add_component(player, VelocityComponent(0, 0, 0))
    em.add_component(player, DirectionComponent(radians(180)))
    player_circle = sf.CircleShape()
    player_circle.radius = 10
    player_circle.fill_color = sf.Color.WHITE
    em.add_component(player, DrawableComponent(player_circle))
    # em.add_component(player, MovementControlComponent())
    em.add_component(player, AudioListenerComponent())
    em.add_component(player, HydrophoneComponent(radians(0)))

    sm.add_system(InputSystem(w))
    sm.add_system(PhysicsSystem())
    sm.add_system(AudioSystem())
    sm.add_system(RenderSystem(w))

    while w.is_open:
        sm.update(clock.restart())

        for event in w.events:
            if type(event) is sf.CloseEvent:
                w.close()

                #
        w.display()
Example #8
0
 def manager(self, systems):
     sm = SystemManager(sentinel.entity_manager)
     for system in systems:
         sm.add_system(system, priority=random.randrange(4))
     return sm
Example #9
0
class Game:
    def __init__(self, display):
        self.display = display
        self.offset = 0
        self.entities = EntityManager()
        prototypes.entities = self.entities
        self.systems = SystemManager(self.entities)
        self.systems.add_system(LinearMotionSystem())
        self.systems.add_system(GravitySystem())
        self.systems.add_system(GroundingSystem())
        self.systems.add_system(DamageSystem())
        self.systems.add_system(CollisionSystem())
        self.systems.add_system(ActorSystem())
        self.drawing_systems = SystemManager(self.entities)
        self.drawing_systems.add_system(DrawingSystem(self.display))
        self.drawing_systems.add_system(DebugDrawingSystem(self.display))
        self.players = (None, None)
        self.lives = [5, 5]
        self.winner = None
        self.player_controllers = resources.get("player_joysticks")
        #resources.get("logfile").write("p1 controller {}\n".format(self.player_controllers[0]))
        #resources.get("logfile").write("that controller id {}\n".format(resources.get("joysticks")[self.player_controllers[0]].get_id()))
        #resources.get("logfile").write("p2 controller {}\n".format(self.player_controllers[1]))
        #resources.get("logfile").write("that controller id {}\n".format(resources.get("joysticks")[self.player_controllers[1]].get_id()))
        self.old_sticks = []
        self.joysticks = [resources.get("joysticks")[resources.get("player_joysticks")[0]], resources.get("joysticks")[resources.get("player_joysticks")[1]]]
        self.maxmin = [0, 0, 0, 0]
        self.logfile = resources.get("logfile")
        self.create_world()

    def create_world(self):
        p1 = prototypes.create_player((-100, 0), "foreveralone")
        p2 = prototypes.create_player((100, 0), "nyancat")
        self.players = (p1, p2)
        tiled = pygame.Surface((378, 54))
        for i in range(0, 7):
            tiled.blit(resources.get("imgTile"), (54*i, 0))
        prototypes.create_terrain((0, -50), rect((0, 0),378, 54), tiled)
        tiled = pygame.Surface((756, 54))
        for i in range(0, 14):
            tiled.blit(resources.get("imgTile"), (54*i, 0))
        prototypes.create_terrain((0, 300), rect((0, 0),756, 54), tiled)

        prototypes.create_terrain((-400, 200), circle((0, 0),80), resources.get("imgCake"))
        prototypes.create_terrain((400, 200), circle((0, 0),80), resources.get("imgCake"))

    def process_input(self, event):
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                return "exit"

        elif event.type == JOYAXISMOTION:
            pass
            #print "Joystick '",event.joy,"' axis",event.axis,"motion."
            #player = None
            #if event.joy == self.player_controllers[0]:
            #    player = 0
            #elif event.joy == self.player_controllers[1]:
            #    player = 1
            #if utils.map_axis(event.axis) == "stick":
            #    return (player, utils.map_axis(event.axis))
        elif event.type == JOYBUTTONDOWN:
            player = None
            if event.joy == self.player_controllers[0]:
                #resources.get("logfile").write("p1 button{} {}\n".format(event.joy, self.player_controllers[0]))
                player = 0
            elif event.joy == self.player_controllers[1]:
                #resources.get("logfile").write("p2 button{} {}\n".format(event.joy, self.player_controllers[1]))
                player = 1
            return (player, utils.map_buttons(event.button))
        elif event.type == JOYBUTTONUP:
                print "Joystick '",event.joy,"' button",event.button,"up."
        elif event.type == JOYHATMOTION:#disabled
                pass# print "Joystick '",event.joy,"' hat",event.hat," moved.", event.value
        return None

    def add_command(self, player, command):
        actor = self.entities.component_for_entity(self.players[player], Actor)
        actor.commands.append(command)

    def update(self, commands):
        #self.logfile.write("frame\n")
        impact = [False, False]
        direction = [None, None]

        stick_0 = self.evaluate_joystick(0)
        stick_1 = self.evaluate_joystick(1)
        if self.old_sticks != []:
            change1 = length(sub(self.old_sticks[0]["stick"], stick_0["stick"]))
            if change1 > resources.get("impactThreshold"):
                impact[0] = True
            #self.logfile.write("p1 {}\n".format(stick_0["stick"]))
            position = length(stick_0["stick"])
            if position < 0.2:
                direction[0] = "neutral"
            else:
                stickdir = utils.normalized(stick_0["stick"])
                if stickdir[0] > 0.7:
                    direction[0] = "right"
                elif stickdir[0] < -0.7:
                    direction[0] = "left"
                elif stickdir[1] > 0.7:
                    direction[0] = "down"
                elif stickdir[1] < -0.7:
                    direction[0] = "up"
                #self.logfile.write("p1 dir {}\n".format(direction[0]))

            change2 = length(sub(self.old_sticks[1]["stick"], stick_1["stick"]))
            if change2 > resources.get("impactThreshold"):
                impact[1] = True
            position = length(stick_1["stick"])
            if position < 0.2:
                direction[1] = "neutral"
            else:
                stickdir = utils.normalized(stick_1["stick"])
                if stickdir[0] > 0.7:
                    direction[1] = "right"
                elif stickdir[0] < -0.7:
                    direction[1] = "left"
                elif stickdir[1] > 0.7:
                    direction[1] = "down"
                elif stickdir[1] < -0.7:
                    direction[1] = "up"

            #self.logfile.write("p2 dir {}\n".format(direction[1]))

            actor = self.entities.component_for_entity(self.players[0], Actor)
            actor.direction = direction[0]
            actor.impact = impact[0]

            actor2 = self.entities.component_for_entity(self.players[1], Actor)
            actor2.direction = direction[1]
            actor2.impact = impact[1]
        else:
            self.old_sticks = [None, None]

        self.old_sticks[0] = stick_0
        self.old_sticks[1] = stick_1

        for command in commands:
            if command == "exit":
                return "finish"
            if len(command) == 2:
                if command[1] == "A":
                    self.add_command(command[0], "attack")
                if command[1] == "L":
                    self.add_command(command[0], "shield")

        self.systems.update(1.0/resources.get("fps"))

        position = self.entities.component_for_entity(self.players[0], Position)
        if position.x < -512 or position.x > 512 or position.y < -500 or position.y > 384:
            self.lives[0] -= 1
            position.x = 0
            position.y = 0
            velocity = self.entities.component_for_entity(self.players[0], Velocity)
            velocity.dx = 0
            velocity.dy = 0
            if self.lives[0] == 0:
                self.winner = 1
        position2 = self.entities.component_for_entity(self.players[1], Position)
        if position2.x < -512 or position2.x > 512 or position2.y < -500 or position2.y > 384:
            self.lives[1] -= 1
            position2.x = 0
            position2.y = 0
            velocity2 = self.entities.component_for_entity(self.players[1], Velocity)
            velocity2.dx = 0
            velocity2.dy = 0
            if self.lives[1] == 0:
                self.winner = 0
        return None

    def evaluate_joystick(self, id):
        joystick = self.joysticks[id]
        state = dict()
        state["stick"] = (joystick.get_axis(0), joystick.get_axis(1))
        #state["cstick"] = (0, 0)#(joystick.get_axis(2), joystick.get_axis(3))
        return state

    def render(self):
        if self.winner is None:
            self.drawing_systems.update(1)

            icon = resources.get("imgAloneIcon")
            position = (50, 650)
            for i in range(0, self.lives[0]):
                self.display.blit(icon, (position[0]+i*icon.get_width(), position[1]))

            icon = resources.get("imgNyancatIcon")
            position = (700, 650)
            for i in range(0, self.lives[1]):
                self.display.blit(icon, (position[0]+i*icon.get_width(), position[1]))

        else:
            #self.display.blit(resources.get("imgBackgroundGO"), (0, 0))

            self.display.blit(resources.get("imgGOString"), (300, 150))

            if self.winner == 0:
                string = "Player1 wins!"
                color = (255, 0, 0)
            elif self.winner == 1:
                string = "Player2 wins!"
                color = (0, 0, 255)
            text_surface = resources.get("basicFont").render(string, True, color)
            text_rect = text_surface.get_rect()
            text_rect.centerx = self.display.get_rect().centerx
            text_rect.centery = self.display.get_rect().centery
            self.display.blit(text_surface, text_rect)
Example #10
0
def game_loop(con):
    '''The main game loop.'''
    tdl.event.set_key_repeat(500, 100)
    game_map = eldmapgen.new_map()
    ent_mgr = EntityManager()

    player_coords = eldmap.random_unoccupied(ent_mgr, game_map,
                                             eldmapgen.DEFAULT_MAP_SEED)
    player = ents.new_player(ent_mgr, game_map, player_coords)
    torch_coords = eldmap.random_unoccupied(ent_mgr, game_map,
                                            eldmapgen.DEFAULT_MAP_SEED)
    client_list = []
    for _ in range(random.randint(1, MAX_CLIENTS)):
        for client_coords in utils.adjacent8(player_coords):
            if eldmap.passable(ent_mgr, game_map, client_coords):
                client_list.append(
                    (ents.new_client(ent_mgr, game_map,
                                     client_coords), client_coords))
                break

    ents.new_torch(ent_mgr, game_map, torch_coords)
    # ents.new_client(ent_mgr, game_map, (8, 3))
    main_display = tdl.Window(con, 0, 0, 25, 15)
    ents.new_tracking_camera(ent_mgr, game_map, main_display, player)

    sys_mgr = SystemManager(ent_mgr)
    sys_mgr.add_system(systems.UpdateWorldSys())
    sys_mgr.add_system(systems.LightingSys(game_map))
    sys_mgr.add_system(systems.FOVSys())
    sys_mgr.add_system(systems.FOWSys())
    fog_sys = systems.FogSys((main_display.width, main_display.height))
    sys_mgr.add_system(fog_sys)

    event_sys = systems.EventSys(CONSOLE_WIDTH, CONSOLE_HEIGHT)
    sys_mgr.add_system(event_sys)
    sys_mgr.add_system(systems.AISys())
    sys_mgr.add_system(systems.ActorSys())
    sys_mgr.add_system(systems.FollowEntitySys())
    sys_mgr.add_system(systems.RenderDisplaySys(fog_sys.get_fogmap))
    start_time = utils.cur_time_ms()
    prev_time = start_time
    cur_time = prev_time
    while not event_sys.game_ended:
        cur_time = utils.cur_time_ms()
        sys_mgr.update(cur_time - prev_time)  # 0 is a placeholder value
        prev_time = cur_time
def scanner_test():
    w = sf.RenderWindow(sf.VideoMode(400, 400), "Scanner Test")
    clock = sf.Clock()

    em = MyEntityManager()
    sm = SystemManager(em)

    car1 = em.create_entity()
    em.add_component(car1, PositionComponent(0, 0, 0))
    em.add_component(car1, VelocityComponent(0, 0, 0))
    car1_circle = sf.CircleShape()
    car1_circle.radius = 10
    car1_circle.fill_color = sf.Color.RED
    em.add_component(car1, DrawableComponent(car1_circle))
    em.add_component(car1, MovementControlComponent())
    em.add_component(car1,
                     ScanSoundComponent("engine_idle_freesound_loop.wav"))
    car1_engine_sound = PositionSoundComponent(
        "engine_idle_freesound_loop.wav")
    car1_engine_sound.sound.loop = True
    em.add_component(car1, car1_engine_sound)

    player = em.create_entity()
    em.add_component(player, PositionComponent(100, 100, 0))
    em.add_component(player, VelocityComponent(0, 0, 0))
    em.add_component(player, DirectionComponent(radians(180)))
    player_circle = sf.CircleShape()
    player_circle.radius = 10
    player_circle.fill_color = sf.Color.WHITE
    em.add_component(player, DrawableComponent(player_circle))
    #em.add_component(player, MovementControlComponent())
    em.add_component(player, AudioListenerComponent())
    em.add_component(player, HydrophoneComponent(radians(0)))

    sm.add_system(InputSystem(w))
    sm.add_system(PhysicsSystem())
    sm.add_system(AudioSystem())
    sm.add_system(RenderSystem(w))

    while w.is_open:
        sm.update(clock.restart())

        for event in w.events:
            if type(event) is sf.CloseEvent:
                w.close()

        #
        w.display()