proper star animations

--HG--
branch : vssg
This commit is contained in:
cecilkorik 2007-01-26 02:25:47 +00:00
parent fcb7f7fcec
commit 65cd7de4b1
4 changed files with 72 additions and 45 deletions

View file

@ -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 get the amount of time passed since the last frame was displayed
""" """
return get_ return g_elapsed

View file

@ -1,12 +1,20 @@
import math import math
import pygame import pygame
import random import random
import gametimer
class Galaxy(object): class Galaxy(object):
def __init__(self, width, height): def __init__(self, width, height):
self.starmap = [[[] for x in range(width)] for x in range(height)] self.starmap = [[[] for x in range(width)] for x in range(height)]
self.starlist = [] 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): def add_star(self, star):
self.starlist.append(star) self.starlist.append(star)
self.starmap[int(star.y / 100)][int(star.x / 100)].append(star) self.starmap[int(star.y / 100)][int(star.x / 100)].append(star)
@ -51,16 +59,25 @@ class StarSys(object):
self.habitat = habitat self.habitat = habitat
self.minerals = minerals self.minerals = minerals
def draw(self, surf): def draw(self, surf):
frame = random.random() self.startype.draw(surf, int(self.x / 10), int(self.y / 10), self.frame)
if frame > 0.5: def update(self):
frame = 1 #if self.startype.size == "Dwarf" and self.startype.color == "White":
else: #print gametimer.elapsed()
frame = 2 #print self.frame_timer
self.startype.draw(surf, int(self.x / 10), int(self.y / 10), frame) #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): def set_frame_timers(self, delays):
self.show1 = show1 self.delays = [int(x * 1000) for x in delays]
self.show2 = show2 self.frame_timer = self.delays[0]
self.frame = 0
class StarClass(object): class StarClass(object):
def __init__(self, name, color, size, habitat_mod, minerals_mod): def __init__(self, name, color, size, habitat_mod, minerals_mod):
@ -69,23 +86,15 @@ class StarClass(object):
self.size = size self.size = size
self.habitat_mod = habitat_mod self.habitat_mod = habitat_mod
self.minerals_mod = minerals_mod self.minerals_mod = minerals_mod
self.png1 = None self.frames = None
self.png2 = None
def draw(self, surf, x, y, frame): def draw(self, surf, x, y, frame):
if self.png1 == None: if self.frames == None:
self.png1 = pygame.image.load('img/%s_%s1.png' % (self.color.lower(), self.size.lower())) self.frames = [pygame.image.load('img/%s_%s%d.png' % (self.color.lower(), self.size.lower(), i+1)) for i in range(2)]
self.png1.convert_alpha(surf) for png in self.frames:
self.png2 = pygame.image.load('img/%s_%s2.png' % (self.color.lower(), self.size.lower())) png.convert_alpha(surf)
self.png2.convert_alpha(surf) dest = self.frames[frame].get_rect()
if frame == 1: dest.x = x - (dest.w / 2) + 1
dest = self.png1.get_rect() dest.y = y - (dest.h / 2) + 1
dest.x = x - (dest.w / 2) + 1 surf.blit(self.frames[frame], dest)
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)

View file

@ -122,21 +122,24 @@ def starmap_generate():
if i >= numstars: if i >= numstars:
break 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 x = (random.random() * mapx) + 1
y = (random.random() * mapy) + 1 y = (random.random() * mapy) + 1
x *= 100 x *= 100
y *= 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) star = map.get_nearest_star(x, y)
dist = map.get_distance(x, y, star.x, star.y) dist = map.get_distance(x, y, star.x, star.y)
if dist < mindist: if dist < mindist:
print "Dist (%s, %s): %s, Mindist (%s, %s): %s" % (star.x, star.y, dist, int(x), int(y), mindist) print "Dist (%s, %s): %s, Mindist (%s, %s): %s" % (star.x, star.y, dist, int(x), int(y), mindist)
mindist -= 2
continue continue
mindist = None
loopcount = 0 loopcount = 0
startype = None startype = None
while True: while True:
@ -164,7 +167,7 @@ def starmap_generate():
print "Generated star %s %s %s at (%s, %s)" % (startype.name, hab, min, int(x), int(y)) 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 = 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) map.add_star(star)
i += 1 i += 1

20
vssg.py
View file

@ -8,6 +8,7 @@ import math
import random import random
import starmap import starmap
import starmap_gen import starmap_gen
import gametimer
from ocempgui.widgets import * from ocempgui.widgets import *
from ocempgui.widgets.Constants import * from ocempgui.widgets.Constants import *
@ -88,9 +89,9 @@ def screen_mainmenu():
re.title = "vssg 0.1 - Very Simple Space Game" re.title = "vssg 0.1 - Very Simple Space Game"
re.color = (40,0,70) re.color = (40,0,70)
b_start = Button("Start Game") b_start = Button("#Start Game")
b_options = Button("Options") b_options = Button("#Options")
b_quit = Button("Quit") b_quit = Button("#Quit")
blist = [b_start, b_options, b_quit] blist = [b_start, b_options, b_quit]
totheight = (b_start.height * len(blist)) + (5 * (len(blist) - 1)) totheight = (b_start.height * len(blist)) + (5 * (len(blist) - 1))
maxwidth = 0 maxwidth = 0
@ -169,9 +170,9 @@ def screen_options():
btnframe = HFrame() btnframe = HFrame()
btnframe.border = BORDER_NONE btnframe.border = BORDER_NONE
btnframe.spacing = 5 btnframe.spacing = 5
b_ok = Button("OK") b_ok = Button("#OK")
b_apply = Button("Apply") b_apply = Button("#Apply")
b_cancel = Button("Cancel") b_cancel = Button("#Cancel")
b_ok.connect_signal(SIG_CLICKED, btn_ok) b_ok.connect_signal(SIG_CLICKED, btn_ok)
b_apply.connect_signal(SIG_CLICKED, btn_apply) b_apply.connect_signal(SIG_CLICKED, btn_apply)
b_cancel.connect_signal(SIG_CLICKED, btn_cancel) b_cancel.connect_signal(SIG_CLICKED, btn_cancel)
@ -186,9 +187,11 @@ def screen_options():
guiscreen = screen_mainmenu() guiscreen = screen_mainmenu()
gametimer.start_loop()
while True: while True:
events = pygame.event.get() events = pygame.event.get()
gametimer.next_frame()
if guiscreen != None: if guiscreen != None:
for ev in events: for ev in events:
@ -218,9 +221,8 @@ while True:
break break
handle_keys(keys) handle_keys(keys)
map.update()
for star in map.get_all_stars(): map.draw(scr)
star.draw(scr)
pygame.display.flip() pygame.display.flip()