Exemple #1
0
 def reset(self, side: int=None):
     self.transform.position = engine.Vector(Game.width, Game.height) // 2
     side = side if isinstance(side, int) else random.randint(0, 1)
     theta = random.randint(7, 30) * (random.randint(0, 1) * 2 - 1)
     # theta = 0
     self.velocity = engine.Vector(side * 2 - 1, 0).rotate(theta) * self.SPEED
     self.speed = 0
Exemple #2
0
    def initialize(self):
        app = engine.app()
        engine.instantiate(engine.component.Event(self.close_event, "WINDOW"),
                           id=False)

        app.window._master.title(f"Pyrio")
        app.world.system(engine.ecs.systems.Render, True)
        app.world.add_system(PhysBodySystem(), "PHYSICS")
        app.world.add_system(engine.ecs.systems.FPS(50), "POST")
        # engine.ecs.World.active()._systems.insert(2, Collision())
        # engine.ecs.World.active()._systems.insert(3, LandOnFloor())

        engine.instantiate(  # FPS Counter
            engine.component.FPS(),
            engine.component.Render(engine.render.Text("FPS"), True),
            transform=engine.component.Transform(
                engine.Vector(Game.width - 20, 10)))

        engine.instantiate(  # Player
            Player(),
            PhysBody(),
            engine.component.Collider(
                engine.physics.collider.Rectangle,
                engine.component.Transform(scl=engine.Vector(50, 50))),
            engine.component.Render(engine.render.Polygon.Quad(50, 50)),
            transform=engine.component.Transform(
                engine.Vector(Game.width // 8, 3 * Game.height // 4)))
Exemple #3
0
    def initialize(self):
        super().initialize()
        self.obstacle = self.Get(ObstacleManager)

        self._text_score = engine.render.Text(0)
        engine.instantiate(engine.component.Render(self._text_score, True),
                           parent=self.entity,
                           transform=engine.component.Transform(
                               engine.Vector(GameApplication.width - 20, 32)))
        self._text_high = engine.render.Text(0)
        engine.instantiate(engine.component.Render(self._text_high, True),
                           parent=self.entity,
                           transform=engine.component.Transform(
                               engine.Vector(GameApplication.width - 20, 20)))

        if engine.app().program.AIState >= GameApplication.AIState.ACTIVE:
            self._text_net_out = engine.render.Text([0, 0, 0])
            engine.instantiate(engine.component.Render(self._text_net_out,
                                                       True),
                               parent=self.entity,
                               transform=engine.component.Transform(
                                   engine.Vector(GameApplication.width - 300,
                                                 50)))

            self._text_net = engine.render.Text("NET")
            engine.instantiate(engine.component.Render(self._text_net, True),
                               parent=self.entity,
                               transform=engine.component.Transform(
                                   engine.Vector(GameApplication.width - 300,
                                                 70)))

        self.state = self.GameState.RUN
Exemple #4
0
    def update(self):
        collisions = {l for c in self.collider.collision for l in c.layers}
        if self.layers["Enviroment"] in collisions:
            self.floor = True
        else:
            self.floor = False

        if self.layers["Obstacle"] in collisions:
            self.manager.collide()
            try:
                self.Get(PlayerControllerAI).fail()
            except engine.error.ecs.GetComponentError:
                pass

        if self._jump:
            self._jump = False
            if self.floor:
                self.body.force(engine.Vector(0, -5000))

        if self._fall:
            self._fall = False
            if not self.floor:
                self.body.force(engine.Vector(0, 250))

        if self.floor:
            self.transform.position = engine.Vector(self.transform.position[0],
                                                    FLOOR - 50)
            self.body.velocity = engine.Vector(self.body.velocity[0], 0)
Exemple #5
0
class Paddle(engine.component.Script):

    SIZE = engine.Vector(20, 100)
    QUAD = engine.render.Polygon.Quad(*SIZE)
    _CLAMPS = engine.Vector(0, SIZE[1] // 2 + 1), engine.Vector(Game.width, Game.height-(SIZE[1] // 2 + 1))
    SPEED = 500

    def __init__(self, side: int):
        self.side = side
        self._move_up = False
        self._move_down = False

    def initialize(self):
        super().initialize()
        self.transform = self.Get(engine.component.Transform)

    def update(self):
        ms = engine.Vector(0, self.SPEED * engine.core.DeltaTime.ph())
        if self._move_up:
            self._move_up = False
            self.transform.position -= ms
        if self._move_down:
            self._move_down = False
            self.transform.position += ms
        self.transform.position = self.transform.position.clamp(*self._CLAMPS)

    def move_up(self):
        self._move_up = True
    def move_down(self):
        self._move_down = True
Exemple #6
0
 def keypress(self):
     force = 200
     if engine.input.key(engine.input.Key.D):
         self.phys.force(engine.Vector(force, 0))
     if engine.input.key(engine.input.Key.A):
         self.phys.force(engine.Vector(-force, 0))
     if engine.input.key(engine.input.Key.W) and self.phys.ground:
         print("JUMP", engine.core.DeltaTime().value)
         self.phys.force(engine.Vector(0, -force * 2000))
Exemple #7
0
    def initialize(self, app: engine.core.Application):
        super().initialize(app)
        engine.instantiate(engine.component.Event(self.close_event, "WINDOW"),
                           id=False)

        app.window._master.title(f"Dinosaur")
        app.world.system(engine.ecs.systems.Render, True)
        app.world.add_system(PhysBodySystem(), "PHYSICS")
        app.world.add_system(engine.ecs.systems.FPS(), "POST")

        setting_collision = app.setting.collision()
        setting_collision.matrix.make(
            setting_collision.layers.set("Player", 10),
            setting_collision.layers.set("Enviroment", 11),
            setting_collision.layers.set("Obstacle", 12),
        )
        setting_collision.matrix.compile()

        setting_render = app.setting.render()
        setting_render.layers["Player"] = 110
        setting_render.compile()

        manager = StateManager()
        engine.instantiate(manager, ObstacleManager(),
                           engine.component.Event(manager.restart))

        engine.instantiate(  # Player
            PlayerController(manager),
            PlayerControllerAI(manager) if self.AIState >= self.AIState.ACTIVE
            else PlayerControllerInput(),
            PhysBody(0.06),
            engine.component.Collider(
                engine.physics.collider.Rectangle,
                engine.component.Transform(scl=engine.Vector(50, 100)),
                "Player"),
            engine.component.Render(engine.render.Polygon.Quad(50, 100),
                                    layer="Player"),
            transform=engine.component.Transform(
                engine.Vector(GameApplication.width // 16,
                              GameApplication.height // 2)))

        engine.instantiate(  # Floor
            engine.component.Collider(
                engine.physics.collider.Rectangle,
                engine.component.Transform(
                    scl=engine.Vector(GameApplication.width, 20)),
                "Enviroment"),
            engine.component.Render(
                engine.render.Polygon.Quad(GameApplication.width, 20)),
            transform=engine.component.Transform(
                engine.Vector(GameApplication.width // 2, FLOOR + 10)))

        engine.instantiate(  # FPS
            engine.component.FPS(),
            engine.component.Render(engine.render.Text("FPS"), True),
            transform=engine.component.Transform(
                engine.Vector(GameApplication.width - 20, 8)))
Exemple #8
0
 def keypress(self):
     if engine.input.key(engine.input.Key.W):
         self.dir = engine.Vector(0, -1)
     elif engine.input.key(engine.input.Key.S):
         self.dir = engine.Vector(0, 1)
     elif engine.input.key(engine.input.Key.A):
         self.dir = engine.Vector(-1, 0)
     elif engine.input.key(engine.input.Key.D):
         self.dir = engine.Vector(1, 0)
Exemple #9
0
 def collided(self):
     if self.collider.collision:
         if self.prev is None:
             collider = next(iter(self.collider.collision))
             self.prev = collider
             self.speed += self.RATE
             self.scores["tally"].value += 1
             if collider.Get(Paddle).side: # Right
                 self.velocity = engine.Vector(-abs(self.velocity[0]), self.velocity[1])
             else:
                 self.velocity = engine.Vector(abs(self.velocity[0]), self.velocity[1])
     else:
         self.prev = None
Exemple #10
0
 def reset(self):
     self.vel = engine.Vector(-self.SPEED, 0)
     self.speed = 1
     self.dist = 0
     for i in range(len(self.children)):
         self.remove()
     self._colour_count = 0
Exemple #11
0
    def __init__(self):
        self.children = deque()
        self.vel = engine.Vector(-self.SPEED, 0)
        self.speed = 1
        self.dist = 0

        self._colour_array = [(1, 0, 0), (1, .75, 0), (0, 1, 0), (0, .5, .5),
                              (0, 0, 1), (.5, 0, .5)]
        self._colour_count = 0
Exemple #12
0
 def update(self):
     ms = engine.Vector(0, self.SPEED * engine.core.DeltaTime.ph())
     if self._move_up:
         self._move_up = False
         self.transform.position -= ms
     if self._move_down:
         self._move_down = False
         self.transform.position += ms
     self.transform.position = self.transform.position.clamp(*self._CLAMPS)
Exemple #13
0
    def update(self):
        self.collided()

        self.transform.position += self.velocity * self.speed * engine.core.DeltaTime.ph()
        # Keep the ball within the top and bottom
        if self.transform.position[1] < Ball.RADIUS:
            self.velocity = engine.Vector(self.velocity[0], abs(self.velocity[1]))
        elif self.transform.position[1] > Game.height-Ball.RADIUS:
            self.velocity = engine.Vector(self.velocity[0], -abs(self.velocity[1]))

        # Reset the ball once of the sides
        if self.transform.position[0] < -Ball.RADIUS:
            side = 1
            self.scores["right"].value += 1
            self.reset(side)
        elif self.transform.position[0] > Game.width + Ball.RADIUS:
            side = 0
            self.scores["left"].value += 1
            self.reset(side)
Exemple #14
0
 def add(self):
     self.dist = random.randint(self.__range, GameApplication.width)
     width = random.randint(*self.WIDTH)
     dim = engine.Vector(width, self.AREA // width)
     obstacle = Obstacle(*dim)
     engine.instantiate(
         obstacle,
         engine.component.Collider(engine.physics.collider.Rectangle,
                                   engine.component.Transform(scl=dim),
                                   "Obstacle"),
         engine.component.Render(
             engine.render.Polygon.Quad(
                 *dim,
                 col=self._colour_array[self._colour_count %
                                        len(self._colour_array)])),
         transform=engine.component.Transform(
             engine.Vector(self._spawn, FLOOR - 2 - dim[1] // 2)))
     self.children.append(obstacle)
     self._colour_count += 1
Exemple #15
0
class PhysBodySystem(engine.ecs.System):

    GRAVITY = engine.Vector(0, 9.81) * 100

    def update(self, app: engine.core.Application):
        dt = engine.core.DeltaTime.ph()
        for component in self.components(PhysBody):
            adt = component.acceleration * dt
            component.transform.position += component.velocity * dt + 0.5 * adt * dt
            component.velocity += adt
            component.acceleration = self.GRAVITY
Exemple #16
0
    def initialize(self):
        # # REMOVE GLOBAL COLLISION - TEMPORARY FIX
        # index = None
        # for i, s in enumerate(engine.ecs.World.active()._systems):
        #     if isinstance(s, engine.ecs.systems.Collider):
        #         index = i
        #         break
        # engine.ecs.World.active()._systems.pop(index)
        engine.ecs.World.active()._systems.insert(1, Collision())

        engine.ecs.Instantiate(  # FPS Counter
            engine.component.FPSCounter(10),
            engine.component.Render(engine.render.Text("FPS"), True),
            transform=engine.component.Transform(
                engine.Vector(Game.width - 20, 10)))

        snake_comp = Snake()
        snake = engine.ecs.Instantiate(  # Snake
            snake_comp,
            transform=engine.component.Transform(
                scale=engine.Vector(SCALE, SCALE)))

        SIZE = 3
        for pos in range(SIZE):
            snake_comp.children.append(
                create_body(
                    snake,
                    engine.component.Transform(
                        engine.Vector(Game.width // 2 + SCALE * pos,
                                      Game.height // 2))))

        FOOD = 1
        for iterations in range(FOOD):
            engine.ecs.Instantiate(  # Food
                Food(),
                engine.component.Collider(engine.physics.collider.Point),
                engine.component.Render(
                    engine.render.Polygon.Quad(SCALE * 0.9, SCALE * 0.9)),
            )
Exemple #17
0
 def __init__(self, scores):
     self.velocity = engine.Vector(0, 0)
     self.speed = 1
     self.scores = scores
Exemple #18
0
 def __init__(self, mass: float = 1):
     self.mass = mass
     self.acceleration = engine.Vector(0, 0)
     self.velocity = engine.Vector(0, 0)
Exemple #19
0
 def collide(self):
     self.vel = engine.Vector(0, 0)
Exemple #20
0
    def initialize(self):
        app = engine.app()
        engine.instantiate(engine.component.Event(self.close, "WINDOW"))

        app.world.add_system(ScoreManager(), "RENDER")
        app.setting.collision().update({
            0: {1,},
        })

        scores = {
            "tally": Score(0),
            "left": Score(0),
            "right": Score(0)
        }

        engine.instantiate( # Ball
            (ball := Ball(scores)),
            engine.component.Event(ball.event_start), # Change collider to Circle once implemented
            engine.component.Collider(engine.physics.collider.Rectangle, engine.component.Transform(scl=engine.Vector(Ball.RADIUS, Ball.RADIUS)), 0),
            engine.component.Render(engine.render.Polygon.Circle(Ball.RADIUS, res=Ball.RESOLUTION)),
            transform=engine.component.Transform(engine.Vector(Game.width, Game.height) // 2)
        )

        score_parent = engine.instantiate(
            transform=engine.component.Transform(engine.Vector(Game.width // 2, Game.height // 10))
        )

        engine.instantiate(
            scores["tally"],
            engine.component.Render(engine.render.Text("T"), True),
            parent=score_parent,
            transform=engine.component.Transform(engine.Vector(0, 10))
        )

        engine.instantiate(
            scores["left"],
            engine.component.Render(engine.render.Text("L"), True),
            parent=score_parent,
            transform=engine.component.Transform(engine.Vector(-10, 0))
        )

        engine.instantiate(
            scores["right"],
            engine.component.Render(engine.render.Text("R"), True),
            parent=score_parent,
            transform=engine.component.Transform(engine.Vector(10, 0))
        )

        engine.instantiate( # Left Paddle
            Paddle(0),
            # (ai := PaddleAI(ball, scores["tally"])),
            # engine.component.Event(ai.event),
            PaddlePlayer(engine.input.Key.W, engine.input.Key.S),
            engine.component.Collider(engine.physics.collider.Rectangle, engine.component.Transform(scl=Paddle.SIZE), 1),
            engine.component.Render(Paddle.QUAD),
            transform=engine.component.Transform(engine.Vector(Paddle.SIZE[0], Game.height // 2))
        )

        engine.instantiate( # Right Paddle
            Paddle(1),
            # (ai := PaddleAI(ball, scores["tally"])),
            # engine.component.Event(ai.event),
            PaddlePlayer(engine.input.Key.UP, engine.input.Key.DOWN),
            engine.component.Collider(engine.physics.collider.Rectangle, engine.component.Transform(scl=Paddle.SIZE), 1),
            engine.component.Render(Paddle.QUAD),
            transform=engine.component.Transform(engine.Vector(Game.width - Paddle.SIZE[0], Game.height // 2))
        )
Exemple #21
0
 def move(self):
     self.transform.position = engine.Vector(
         random.randrange(1, Game.width // SCALE),
         random.randrange(1, Game.height // SCALE)) * SCALE
Exemple #22
0
 def initialize(self) -> bool:
     self.time = 0
     self.modifier = 1
     self.dir = engine.Vector(-1, 0)
     return True