Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
#
# cocos2d
# http://los-cocos.github.io/cocos-site/
#
# Particle Engine done by Phil Hassey
# http://www.imitationpickles.org
#
from __future__ import division, print_function, unicode_literals
import six
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
import pyglet
from pyglet.gl import *
from cocos.director import *
from cocos.menu import *
from cocos.scene import *
from cocos.layer import *
from cocos.actions import *
from cocos.sprite import Sprite
import random
rr = random.randrange
class Fire:
def __init__(self, x, y, vy, frame, size):
self.x, self.y, self.vy, self.frame, self.size = x, y, vy, frame, size
class FireManager(Layer):
def __init__(self, view_width, num):
super(FireManager, self).__init__()
self.view_width = view_width
self.goodies = []
self.batch = pyglet.graphics.Batch()
self.fimg = pyglet.resource.image('fire.jpg')
self.group = pyglet.sprite.SpriteGroup(self.fimg,
blend_src=GL_SRC_ALPHA, blend_dest=GL_ONE)
self.vertex_list = self.batch.add(4 * num, GL_QUADS, self.group,
'v2i', 'c4B', ('t3f', self.fimg.tex_coords * num))
for n in range(0, num):
f = Fire(0, 0, 0, 0, 0)
self.goodies.append(f)
self.vertex_list.vertices[n * 8:(n + 1) * 8] = [0, 0, 0, 0, 0, 0, 0, 0]
self.vertex_list.colors[n * 16:(n + 1) * 16] = [0, 0, 0, 0, ] * 4
self.schedule(self.step)
def step(self, dt):
w, h = self.fimg.width, self.fimg.height
fires = self.goodies
verts, clrs = self.vertex_list.vertices, self.vertex_list.colors
for n, f in enumerate(fires):
if not f.frame:
f.x = rr(0, self.view_width)
f.y = rr(-120, -80)
f.vy = rr(40, 70) / 100.0
f.frame = rr(50, 250)
f.size = 8 + pow(rr(0.0, 100) / 100.0, 2.0) * 32
f.scale = f.size / 32.0
x = f.x = f.x + rr(-50, 50) / 100.0
y = f.y = f.y + f.vy * 4
c = 3 * f.frame / 255.0
r, g, b = (min(255, int(c * 0xc2)), min(255, int(c * 0x41)), min(255, int(c * 0x21)))
f.frame -= 1
ww, hh = w * f.scale, h * f.scale
x -= ww / 2
if six.PY2:
vs = map(int, [x, y, x + ww, y, x + ww, y + hh, x, y + hh])
else:
vs = list(map(int, [x, y, x + ww, y, x + ww, y + hh, x, y + hh]))
verts[n * 8:(n + 1) * 8] = vs
clrs[n * 16:(n + 1) * 16] = [r, g, b, 255] * 4
def draw(self):
glPushMatrix()
self.transform()
self.batch.draw()
glPopMatrix()
class SpriteLayer(Layer):
def __init__(self):
super(SpriteLayer, self).__init__()
sprite1 = Sprite('grossini.png')
sprite2 = Sprite('grossinis_sister1.png')
sprite3 = Sprite('grossinis_sister2.png')
sprite1.position = (320, 240)
sprite2.position = (620, 100)
sprite3.position = (20, 100)
self.add(sprite1)
self.add(sprite2)
self.add(sprite3)
ju_right = JumpBy((600, 0), height=100, jumps=4, duration=5)
ju_left = JumpBy((-600, 0), height=100, jumps=4, duration=5)
rot1 = Rotate(180 * 4, duration=5)
sprite1.opacity = 128
sc = ScaleBy(9, 5)
rot = Rotate(180, 5)
sprite1.do(Repeat(sc + Reverse(sc)))
sprite1.do(Repeat(rot + Reverse(rot)))
sprite2.do(Repeat(ju_left + Reverse(ju_left)))
sprite2.do(Repeat(Reverse(rot1) + rot1))
sprite3.do(Repeat(ju_right + Reverse(ju_right)))
sprite3.do(Repeat(rot1 + Reverse(rot1)))
class MainMenu(Menu):
def __init__(self):
# call superclass with the title
super(MainMenu, self).__init__("GROSSINI'S SISTERS")
pyglet.font.add_directory('.')
# you can override the font that will be used for the title and the items
self.font_title['font_name'] = 'You Are Loved'
self.font_title['font_size'] = 72
self.font_item['font_name'] = 'You Are Loved'
self.font_item_selected['font_name'] = 'You Are Loved'
# you can also override the font size and the colors. see menu.py for
# more info
# example: menus can be vertical aligned and horizontal aligned
self.menu_valign = CENTER
self.menu_halign = CENTER
items = []
items.append(MenuItem('New Game', self.on_new_game))
items.append(MenuItem('Options', self.on_options))
items.append(MenuItem('Scores', self.on_scores))
items.append(MenuItem('Quit', self.on_quit))
self.create_menu(items, zoom_in(), zoom_out())
# Callbacks
def on_new_game(self):
# director.set_scene(StartGame())
print("on_new_game()")
def on_scores(self):
self.parent.switch_to(2)
def on_options(self):
self.parent.switch_to(1)
def on_quit(self):
director.pop()
class OptionMenu(Menu):
def __init__(self):
super(OptionMenu, self).__init__("GROSSINI'S SISTERS")
self.font_title['font_name'] = 'You Are Loved'
self.font_title['font_size'] = 72
self.font_item['font_name'] = 'You Are Loved'
self.font_item_selected['font_name'] = 'You Are Loved'
self.menu_valign = BOTTOM
self.menu_halign = RIGHT
items = []
items.append(MenuItem('Fullscreen', self.on_fullscreen))
items.append(ToggleMenuItem('Show FPS: ', self.on_show_fps, True))
items.append(MenuItem('OK', self.on_quit))
self.create_menu(items, shake(), shake_back())
# Callbacks
def on_fullscreen(self):
director.window.set_fullscreen(not director.window.fullscreen)
def on_quit(self):
self.parent.switch_to(0)
def on_show_fps(self, value):
director.show_FPS = value
class ScoreMenu(Menu):
def __init__(self):
super(ScoreMenu, self).__init__("GROSSINI'S SISTERS")
self.font_title['font_name'] = 'You Are Loved'
self.font_title['font_size'] = 72
self.font_item['font_name'] = 'You Are Loved'
self.font_item_selected['font_name'] = 'You Are Loved'
self.menu_valign = BOTTOM
self.menu_halign = LEFT
self.create_menu([MenuItem('Go Back', self.on_quit)])
def on_quit(self):
self.parent.switch_to(0)
def init():
director.init(resizable=True, width=640, height=480)
def start():
director.set_depth_test()
firelayer = FireManager(director.get_window_size()[0], 250)
spritelayer = SpriteLayer()
menulayer = MultiplexLayer(MainMenu(), OptionMenu(), ScoreMenu())
scene = Scene(firelayer, spritelayer, menulayer)
twirl_normal = Twirl(center=(320, 240), grid=(16, 12), duration=15, twirls=6, amplitude=6)
twirl = AccelDeccelAmplitude(twirl_normal, rate=4.0)
lens = Lens3D(radius=240, center=(320, 240), grid=(32, 24), duration=5)
waves3d = AccelDeccelAmplitude(
Waves3D(waves=18, amplitude=80, grid=(32, 24), duration=15), rate=4.0)
flipx = FlipX3D(duration=1)
flipy = FlipY3D(duration=1)
flip = Flip(duration=1)
liquid = Liquid(grid=(16, 12), duration=4)
ripple = Ripple3D(grid=(32, 24), waves=7, duration=10, amplitude=100, radius=320)
shakyt = ShakyTiles3D(grid=(16, 12), duration=3)
corners = CornerSwap(duration=1)
waves = AccelAmplitude(Waves(waves=8, amplitude=50, grid=(32, 24), duration=5), rate=2.0)
shaky = Shaky3D(randrange=10, grid=(32, 24), duration=5)
quadmove = QuadMoveBy(
delta0=(320, 240), delta1=(-630, 0), delta2=(-320, -240), delta3=(630, 0), duration=2)
fadeout = FadeOutTRTiles(grid=(16, 12), duration=2)
cornerup = MoveCornerUp(duration=1)
cornerdown = MoveCornerDown(duration=1)
shatter = ShatteredTiles3D(randrange=16, grid=(16, 12), duration=4)
shuffle = ShuffleTiles(grid=(16, 12), duration=1)
orbit = OrbitCamera(
radius=1, delta_radius=2, angle_x=0, delta_x=-90, angle_z=0, delta_z=180, duration=4)
jumptiles = JumpTiles3D(jumps=2, duration=4, amplitude=80, grid=(16, 12))
wavestiles = WavesTiles3D(waves=3, amplitude=60, duration=8, grid=(16, 12))
turnoff = TurnOffTiles(grid=(16, 12), duration=2)
# firelayer.do(
# spritelayer.do(
# menulayer.do(
scene.do(
Delay(3) +
ripple + Delay(2) +
wavestiles + Delay(1) +
twirl +
liquid + Delay(2) +
shakyt + Delay(2) +
ReuseGrid() +
shuffle + Delay(4) + ReuseGrid() + turnoff + Reverse(turnoff) + Delay(1) +
shatter +
flip + Delay(2) +
Reverse(flip) +
flipx + Delay(2) + ReuseGrid() +
flipy + Delay(2) + ReuseGrid() +
flipx + Delay(2) + ReuseGrid() +
flipy + Delay(2) +
lens + ReuseGrid() + ((orbit + Reverse(orbit)) | waves3d) + Delay(1) +
corners + Delay(2) + Reverse(corners) +
waves + Delay(2) + ReuseGrid() + shaky +
jumptiles + Delay(1) +
cornerup + Delay(1) +
Reverse(cornerdown) + Delay(1) +
fadeout + Reverse(fadeout) + Delay(2) +
quadmove + Delay(1) +
Reverse(quadmove) +
StopGrid()
)
scene.do(Delay(10) + OrbitCamera(delta_z=-360 * 3, duration=10 * 4))
firelayer.do(Delay(4) + Repeat(RotateBy(360, 10)))
return scene
def run(scene):
director.run(scene)
if __name__ == "__main__":
init()
s = start()
run(s)