def move(self, val): #Set the 'state' of the player's movement if val == 0: if self.state == 1 or self.state == 3: self.state = 2 else: self.state = 0 else: if self.state == 0 or self.state == 2: self.state = 1 else: self.state = 3 if self.frozen: #Move to a stop self.velocity = Vector2.lerp(self.velocity, Vector2(0, 0), self.inertia) else: if val != 0: self.dir = val #Regular movement self.velocity = Vector2.lerp( self.velocity, Vector2(val * self.speed, self.velocity.y), self.inertia)
def render(self, display): if self.target: screen_center = Vector2(display.get_size()) / 2 #Smooth camera movement #TODO: Add borders for edges of map??? goal = (self.target.position - screen_center) / self.target.z self.position = Vector2.lerp(self.position, goal, self.targetSpeed) for obj in objects.getObjectsOfType(GameObject): #Excluded GameObjects if obj.__class__ in [Camera]: continue if obj.visible and obj.z < self.z: #Reorient the position new_pos = Vector2(obj.position.x, display.get_height() - obj.position.y - obj.scale.y) #Offset based on camera position and parallax new_pos -= Vector2(self.position.x, -self.position.y) * obj.z if type(obj) == GameObject: display.blit(obj.updateSprite(), new_pos) else: obj.render(display, new_pos)
def lerp(start, end, percent): return Point(Vector2.lerp(start, end, percent))