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
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)))
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
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)
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
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))
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)))
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)
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
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
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
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 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)
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
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
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)), )
def __init__(self, scores): self.velocity = engine.Vector(0, 0) self.speed = 1 self.scores = scores
def __init__(self, mass: float = 1): self.mass = mass self.acceleration = engine.Vector(0, 0) self.velocity = engine.Vector(0, 0)
def collide(self): self.vel = engine.Vector(0, 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)) )
def move(self): self.transform.position = engine.Vector( random.randrange(1, Game.width // SCALE), random.randrange(1, Game.height // SCALE)) * SCALE
def initialize(self) -> bool: self.time = 0 self.modifier = 1 self.dir = engine.Vector(-1, 0) return True