diff --git a/img/blue_dwarf2.png b/img/blue_dwarf2.png index f6b5cdb..69565ea 100644 Binary files a/img/blue_dwarf2.png and b/img/blue_dwarf2.png differ diff --git a/img/blue_giant2.png b/img/blue_giant2.png index 4ce5d05..f4d5241 100644 Binary files a/img/blue_giant2.png and b/img/blue_giant2.png differ diff --git a/img/blue_star2.png b/img/blue_star2.png index 4bdc832..f88b4e3 100644 Binary files a/img/blue_star2.png and b/img/blue_star2.png differ diff --git a/img/green_dwarf2.png b/img/green_dwarf2.png index 0badedf..2b06c22 100644 Binary files a/img/green_dwarf2.png and b/img/green_dwarf2.png differ diff --git a/img/green_giant2.png b/img/green_giant2.png index 84b0e80..69095c4 100644 Binary files a/img/green_giant2.png and b/img/green_giant2.png differ diff --git a/img/green_star2.png b/img/green_star2.png index f85ff8b..8525bca 100644 Binary files a/img/green_star2.png and b/img/green_star2.png differ diff --git a/img/orange_dwarf2.png b/img/orange_dwarf2.png index 67c9de4..5d22e0c 100644 Binary files a/img/orange_dwarf2.png and b/img/orange_dwarf2.png differ diff --git a/img/orange_giant2.png b/img/orange_giant2.png index 00fd8b0..f976925 100644 Binary files a/img/orange_giant2.png and b/img/orange_giant2.png differ diff --git a/img/orange_star2.png b/img/orange_star2.png index 69e2309..83dcfe6 100644 Binary files a/img/orange_star2.png and b/img/orange_star2.png differ diff --git a/img/red_dwarf2.png b/img/red_dwarf2.png index c59f7d5..0df4515 100644 Binary files a/img/red_dwarf2.png and b/img/red_dwarf2.png differ diff --git a/img/red_giant2.png b/img/red_giant2.png index b76f3e1..d2a5870 100644 Binary files a/img/red_giant2.png and b/img/red_giant2.png differ diff --git a/img/red_star2.png b/img/red_star2.png index f783798..6667404 100644 Binary files a/img/red_star2.png and b/img/red_star2.png differ diff --git a/img/white_dwarf2.png b/img/white_dwarf2.png index 58e6bad..74b8dc8 100644 Binary files a/img/white_dwarf2.png and b/img/white_dwarf2.png differ diff --git a/img/yellow_dwarf2.png b/img/yellow_dwarf2.png index a0ad520..42784d4 100644 Binary files a/img/yellow_dwarf2.png and b/img/yellow_dwarf2.png differ diff --git a/img/yellow_giant2.png b/img/yellow_giant2.png index a06a840..7df2cf6 100644 Binary files a/img/yellow_giant2.png and b/img/yellow_giant2.png differ diff --git a/img/yellow_star2.png b/img/yellow_star2.png index c82e648..c9c6f84 100644 Binary files a/img/yellow_star2.png and b/img/yellow_star2.png differ diff --git a/starmap.py b/starmap.py index 6207797..93ac4b0 100644 --- a/starmap.py +++ b/starmap.py @@ -2,21 +2,30 @@ 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): @@ -58,8 +67,12 @@ class StarSys(object): self.startype = startype self.habitat = habitat self.minerals = minerals + self.map = None + self.draw_dirty = True def draw(self, surf): - self.startype.draw(surf, int(self.x / 10), int(self.y / 10), self.frame) + 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() @@ -68,11 +81,14 @@ class StarSys(object): #print self.delays #sys.exit(0) self.frame_timer -= gametimer.elapsed() + oldframe = self.frame while self.frame_timer <= 0: - self.frame_timer += self.delays[self.frame] 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] @@ -88,7 +104,7 @@ class StarClass(object): self.minerals_mod = minerals_mod self.frames = None - def draw(self, surf, x, y, frame): + 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: @@ -97,4 +113,7 @@ class StarClass(object): dest.x = x - (dest.w / 2) + 1 dest.y = y - (dest.h / 2) + 1 surf.blit(self.frames[frame], dest) + if id(star.map.selection) == id(star): + surf.blit(star.map.selectionpng, dest) + video.update(dest) diff --git a/starmap_gen.py b/starmap_gen.py index 946f520..ab547b5 100644 --- a/starmap_gen.py +++ b/starmap_gen.py @@ -167,8 +167,8 @@ def starmap_generate(): print "Generated star %s %s %s at (%s, %s)" % (startype.name, hab, min, int(x), int(y)) star = StarSys(int(x), int(y), startype, hab, min) - star.set_frame_timers([0.6 + (random.random() * 1.5), 0.6 + (random.random() * 1.5)]) + star.set_frame_timers([0.6 + (random.random() * 1.5), 0.2 + (random.random() * 0.5)]) map.add_star(star) - + map.selection = star i += 1 return map diff --git a/video.py b/video.py new file mode 100644 index 0000000..7473ca1 --- /dev/null +++ b/video.py @@ -0,0 +1,69 @@ +import pygame + +updatelist = [] +force_full = False +g_scr = None + + +def get_forced_redraw(): + global force_full + return force_full + +def force_redraw(): + """ + >>> force_redraw() -> None + forces a fullscreen update (slow! use with care) + """ + global updatelist, force_full + updatelist = [] + force_full = True + +def update(r): + """ + >>> update(rect) -> None + queues the given rectangle(s) for an update + """ + global updatelist, force_full + + if force_full: + return + if type(r) == tuple: + r = list(r) + elif type(r) != list: + r = [r] + updatelist += r + if len(updatelist) > 100: + force_full = True + updatelist = [] + + +def next_frame(): + """ + >>> next_frame() -> None + finalizes and draws the next frame + """ + global updatelist, force_full + + if force_full: + print "Doing FULL redraw!" + pygame.display.flip() + else: + pygame.display.update(updatelist) + updatelist = [] + force_full = False + +def set_scr(scr): + """ + >>> set_scr(scr) -> None + sets the main screen (turn on?) + """ + global g_scr + g_scr = scr + +def get_scr(): + """ + >>> get_scr() -> pygame.Surface + gets the screen + """ + global g_scr + return g_scr \ No newline at end of file diff --git a/vssg.py b/vssg.py index 0726787..d7fd1a9 100755 --- a/vssg.py +++ b/vssg.py @@ -11,6 +11,7 @@ import starmap_gen import gametimer from ocempgui.widgets import * from ocempgui.widgets.Constants import * +import video pygame.init() @@ -194,6 +195,7 @@ while True: gametimer.next_frame() if guiscreen != None: + video.force_redraw() # irrelevant right now, but when we exit, we'll need a full redraw! for ev in events: if ev.type == QUIT: do_quit = True @@ -202,7 +204,6 @@ while True: break guiscreen.distribute_events(*events) continue - scr.fill((0,0,0)) for ev in events: @@ -216,13 +217,20 @@ while True: pass elif ev.type == KEYDOWN: keys += [ev.key] + elif ev.type == VIDEOEXPOSE: + video.force_redraw() + elif ev.type in (MOUSEBUTTONDOWN, MOUSEBUTTONUP): + pass if do_quit: break handle_keys(keys) map.update() + + if video.get_forced_redraw(): + scr.fill((0,0,0)) + map.draw(scr) - - pygame.display.flip() + video.next_frame()