import math import pygame import random import gametimer import video class Galaxy(object): def __init__(self, width, height): self.starmap = [[[] for x in range(width)] for x in range(height)] self.starlist = [] self.selection = None self.selectionpng = None def update(self): for star in self.get_all_stars(): star.update() def draw(self, scr): if self.selectionpng == None: self.selectionpng = pygame.image.load("img/selection.png") self.selectionpng.convert_alpha(scr) for star in self.get_all_stars(): if video.get_forced_redraw(): star.draw_dirty = True star.draw(scr) def add_star(self, star): self.starlist.append(star) star.map = self self.starmap[int(star.y / 100)][int(star.x / 100)].append(star) def get_distance(self, x, y, x2, y2): return math.sqrt((x-x2)**2 + (y-y2)**2) def get_stars_in_sector(self, sx, sy): return [star for star in self.starmap[sy][sx] if type(star) == StarSys] def get_all_stars(self): return self.starlist def get_nearest_star(self, x, y): mindist = None minstar = None for star in self.get_all_stars(): stardist = self.get_distance(x, y, star.x, star.y) if mindist == None or stardist < mindist: mindist = stardist minstar = star return minstar """ star = None radius = 0 while True: starlist = [] self.get_stars_in_sector(x / 100, y / 100) if if star != None: return star else: """ class StarSys(object): def __init__(self, x, y, startype, habitat, minerals): self.x = x self.y = y self.startype = startype self.habitat = habitat self.minerals = minerals self.map = None self.draw_dirty = True def draw(self, surf): if self.draw_dirty: self.startype.draw(self, surf, int(self.x / 10), int(self.y / 10), self.frame) self.draw_dirty = False def update(self): #if self.startype.size == "Dwarf" and self.startype.color == "White": #print(gametimer.elapsed()) #print(self.frame_timer) #print(self.frame_timer - gametimer.elapsed()) #print(self.delays) #sys.exit(0) self.frame_timer -= gametimer.elapsed() oldframe = self.frame while self.frame_timer <= 0: self.frame += 1 if self.frame >= len(self.delays): self.frame = 0 self.frame_timer += self.delays[self.frame] if self.frame != oldframe: self.draw_dirty = True def set_frame_timers(self, delays): self.delays = [int(x * 1000) for x in delays] self.frame_timer = self.delays[0] self.frame = 0 class StarClass(object): def __init__(self, name, color, size, habitat_mod, minerals_mod): self.name = name self.color = color self.size = size self.habitat_mod = habitat_mod self.minerals_mod = minerals_mod self.frames = None def draw(self, star, surf, x, y, frame): if self.frames == None: self.frames = [pygame.image.load('img/%s_%s%d.png' % (self.color.lower(), self.size.lower(), i+1)) for i in range(2)] for png in self.frames: png.convert_alpha(surf) dest = self.frames[frame].get_rect() dest.x = x - (dest.w / 2) + 1 dest.y = y - (dest.h / 2) + 1 pygame.draw.rect(surf, (0,0,0), dest) surf.blit(self.frames[frame], dest) if id(star.map.selection) == id(star): surf.blit(star.map.selectionpng, dest) video.update(dest)