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
"""
return get_
return g_elapsed

View file

@ -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)
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)

View file

@ -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

24
vssg.py
View file

@ -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()