diff --git a/gametimer.py b/gametimer.py index be1790a..a5dc8bc 100644 --- a/gametimer.py +++ b/gametimer.py @@ -1,5 +1,18 @@ -def timer_elapsed(): +import pygame + +def start_loop(): + global g_timer, g_elapsed + g_elapsed = 0 + g_timer = pygame.time.get_ticks() + +def next_frame(): + global g_timer, g_elapsed + newticks = pygame.time.get_ticks() + g_elapsed = newticks - g_timer + g_timer = newticks + +def elapsed(): """ get the amount of time passed since the last frame was displayed """ - return get_ \ No newline at end of file + return g_elapsed diff --git a/starmap.py b/starmap.py index 88b4e4f..6207797 100644 --- a/starmap.py +++ b/starmap.py @@ -1,11 +1,19 @@ import math import pygame import random +import gametimer class Galaxy(object): def __init__(self, width, height): self.starmap = [[[] for x in range(width)] for x in range(height)] self.starlist = [] + + def update(self): + for star in self.get_all_stars(): + star.update() + def draw(self, scr): + for star in self.get_all_stars(): + star.draw(scr) def add_star(self, star): self.starlist.append(star) @@ -51,16 +59,25 @@ class StarSys(object): self.habitat = habitat self.minerals = minerals def draw(self, surf): - frame = random.random() - if frame > 0.5: - frame = 1 - else: - frame = 2 - self.startype.draw(surf, int(self.x / 10), int(self.y / 10), frame) + self.startype.draw(surf, int(self.x / 10), int(self.y / 10), self.frame) + 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() + while self.frame_timer <= 0: + self.frame_timer += self.delays[self.frame] + self.frame += 1 + if self.frame >= len(self.delays): + self.frame = 0 - def set_frame_timers(self, show1, show2): - self.show1 = show1 - self.show2 = show2 + 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): @@ -69,23 +86,15 @@ class StarClass(object): self.size = size self.habitat_mod = habitat_mod self.minerals_mod = minerals_mod - self.png1 = None - self.png2 = None + self.frames = None def draw(self, surf, x, y, frame): - if self.png1 == None: - self.png1 = pygame.image.load('img/%s_%s1.png' % (self.color.lower(), self.size.lower())) - self.png1.convert_alpha(surf) - self.png2 = pygame.image.load('img/%s_%s2.png' % (self.color.lower(), self.size.lower())) - self.png2.convert_alpha(surf) - if frame == 1: - dest = self.png1.get_rect() - dest.x = x - (dest.w / 2) + 1 - dest.y = y - (dest.h / 2) + 1 - surf.blit(self.png1, dest) - else: - dest = self.png2.get_rect() - dest.x = x - (dest.w / 2) + 1 - dest.y = y - (dest.h / 2) + 1 - surf.blit(self.png2, dest) - \ No newline at end of file + 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 + surf.blit(self.frames[frame], dest) + diff --git a/starmap_gen.py b/starmap_gen.py index 7286683..946f520 100644 --- a/starmap_gen.py +++ b/starmap_gen.py @@ -122,20 +122,23 @@ def starmap_generate(): if i >= numstars: break - if i != 0: - mindist = max(175.0, (mapx + mapy) / 2.0 * 100.0 / ((i + 1)**0.75*0.75)) - x = (random.random() * mapx) + 1 y = (random.random() * mapy) + 1 x *= 100 y *= 100 - if mindist != None and False: + if i != 0 and mindist == None: + mindist = max(125.0, (1000.0 / params.density), (mapx + mapy) / 2.0 * 100.0 / ((i + 1)*0.75)) + + if mindist != None: star = map.get_nearest_star(x, y) dist = map.get_distance(x, y, star.x, star.y) if dist < mindist: print "Dist (%s, %s): %s, Mindist (%s, %s): %s" % (star.x, star.y, dist, int(x), int(y), mindist) + mindist -= 2 continue + + mindist = None loopcount = 0 startype = None @@ -164,7 +167,7 @@ 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.1 + (random.random() * 2), 0.1 + (random.random() * 2)) + star.set_frame_timers([0.6 + (random.random() * 1.5), 0.6 + (random.random() * 1.5)]) map.add_star(star) i += 1 diff --git a/vssg.py b/vssg.py index f3c50ce..0726787 100755 --- a/vssg.py +++ b/vssg.py @@ -8,9 +8,10 @@ import math import random import starmap import starmap_gen +import gametimer from ocempgui.widgets import * -from ocempgui.widgets.Constants import * - +from ocempgui.widgets.Constants import * + pygame.init() @@ -88,9 +89,9 @@ def screen_mainmenu(): re.title = "vssg 0.1 - Very Simple Space Game" re.color = (40,0,70) - b_start = Button("Start Game") - b_options = Button("Options") - b_quit = Button("Quit") + b_start = Button("#Start Game") + b_options = Button("#Options") + b_quit = Button("#Quit") blist = [b_start, b_options, b_quit] totheight = (b_start.height * len(blist)) + (5 * (len(blist) - 1)) maxwidth = 0 @@ -169,9 +170,9 @@ def screen_options(): btnframe = HFrame() btnframe.border = BORDER_NONE btnframe.spacing = 5 - b_ok = Button("OK") - b_apply = Button("Apply") - b_cancel = Button("Cancel") + b_ok = Button("#OK") + b_apply = Button("#Apply") + b_cancel = Button("#Cancel") b_ok.connect_signal(SIG_CLICKED, btn_ok) b_apply.connect_signal(SIG_CLICKED, btn_apply) b_cancel.connect_signal(SIG_CLICKED, btn_cancel) @@ -186,9 +187,11 @@ def screen_options(): guiscreen = screen_mainmenu() +gametimer.start_loop() while True: events = pygame.event.get() + gametimer.next_frame() if guiscreen != None: for ev in events: @@ -218,9 +221,8 @@ while True: break handle_keys(keys) - - for star in map.get_all_stars(): - star.draw(scr) + map.update() + map.draw(scr) pygame.display.flip()