120 lines
3.2 KiB
Python
120 lines
3.2 KiB
Python
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)
|
|
|