import pygame
import rabbyt
import os
import sys
import random
rabbyt.data_director = os.path.dirname(__file__)
#Act upon keyboard and mouse events
def dispatch_events():
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == 115: stack.scatter()
elif event.key == 32: stack.gather()
elif event.key == pygame.K_q: sys.exit()
class Stack():
def __init__(self, pos, screen_size=(1280, 1024), items=[]):
self.pos = pos
self.screen_size = screen_size
self.items = items
#Generate random angle
self.rr = lambda: random.randrange(0, 360)
#Generate random y coordinate
self.rx = lambda: random.randrange(int(self.screen_size[0]/-2), int(self.screen_size[0]/2))
#Generate random x coordinate
self.ry = lambda: random.randrange(int(self.screen_size[1]/-2), int(self.screen_size[1]/2))
def add(self, item):
self.items.append(item)
item.x = self.pos[0]
item.y = self.pos[1]
def gather(self, pos='h', dt=.5):
if pos == 'h': pos = self.pos
for item in self.items:
item.x = rabbyt.ease(item.x, pos[0], rabbyt.get_time(), rabbyt.get_time()+dt)
item.y = rabbyt.ease(item.y, pos[1], rabbyt.get_time(), rabbyt.get_time()+dt)
rot = self.rr()
item.rot = rabbyt.ease(item.rot, rot, rabbyt.get_time(), rabbyt.get_time()+.5)
return 1
def scatter(self, dt=.5):
for item in self.items:
x = self.rx()
y = self.ry()
item.x = rabbyt.ease(item.x, x, rabbyt.get_time(), rabbyt.get_time()+dt)
item.y = rabbyt.ease(item.y, y, rabbyt.get_time(), rabbyt.get_time()+dt)
item.rot = rabbyt.ease(item.rot, self.rr(), rabbyt.get_time(), rabbyt.get_time()+.5)
return 1
if __name__ == '__main__':
pygame.init()
pygame.display.set_mode((1280, 1024), pygame.OPENGL | pygame.DOUBLEBUF | pygame.FULLSCREEN | pygame.NOFRAME)
rabbyt.set_viewport((1280, 1024))
rabbyt.set_default_attribs()
stack = Stack(pos=[-420, -350])
#Change the number of objects here
for x in range(0, 10):
item1 = rabbyt.Sprite('item.png')
stack.add(item1)
c = pygame.time.Clock()
while not pygame.event.get(pygame.QUIT):
c.tick()
rabbyt.clear()
rabbyt.set_time(pygame.time.get_ticks()/1000.0)
rabbyt.render_unsorted(stack.items)
dispatch_events()
pygame.display.flip()