view nagslang/utils.py @ 653:958db47db179 nagslang-0.1

Version 0.1.
author Simon Cross <hodgestar@gmail.com>
date Sun, 08 Sep 2013 02:12:31 +0200
parents ae8eb7c0f7bb
children
line wrap: on
line source

import pygame
import pygame.locals as pgl

import pymunk
import pymunk.pygame_util


def convert_colour(colour):
    if isinstance(colour, pygame.Color):
        return colour
    if isinstance(colour, tuple):
        return pygame.Color(*colour)
    if isinstance(colour, basestring):
        return pygame.Color(colour)
    raise ValueError()


def vec_from_angle(angle, length=1):
    vec = pymunk.Vec2d(length, 0)
    vec.angle = angle
    return vec


def vec_with_length(coords, length=1):
    vec = pymunk.Vec2d(coords)
    # Don't crash if we've created a zero length vector
    if vec.length != 0:
        vec.length = length
    return vec


def points_to_lines(points):
    if len(points) < 2:
        return
    last_point = points[0]
    for point in points[1:]:
        yield (last_point, point)
        last_point = point


def extend_line(a, b, length):
    offset = vec_from_angle((a - b).angle, abs(length))
    if length < 0:
        offset = -offset
    return (a + offset, b - offset)


def points_to_pygame(surface, points):
    return [pymunk.pygame_util.to_pygame(p, surface) for p in points]


def tile_surface(size, tile_image):
    # create a surface, approriately tiled
    surface = pygame.surface.Surface(size, pgl.SRCALPHA)
    x_step = tile_image.get_rect().width
    y_step = tile_image.get_rect().height
    x_count = size[0] // x_step + 1
    y_count = size[1] / y_step + 1
    tile_rect = pygame.rect.Rect(0, 0, x_step, y_step)
    for x in range(x_count):
        tile_rect.x = x * x_step
        for y in range(y_count):
            tile_rect.y = y * y_step
            surface.blit(tile_image, tile_rect)
    return surface