Esempio n. 1
0
    def show_video_modes(self):
        self.events.add(Event.KEYUP_Event(key=K_f, callback=self.toggle_fullscreen))
        self.events.add(Event.KEYUP_Event(key=K_PAGEUP, callback=self.grow))
        self.events.add(Event.KEYUP_Event(key=K_PAGEDOWN, callback=self.shrink))
        self.events.add(Event.KEYUP_Event(key=K_RETURN, callback=self._quit))

        s = Drawable.String(w=self, message='video',
                                fontSize=40)
        s.center(y=85)
        s = Drawable.Stationary(w=self, sprite=s)
        s.draw()

        b1 = Widget.SpriteTextButton(self, '640 x 480', callback=self.resize640x480,
                                        group=self.events)
        b1.center(y=125, dx=-100)
        self.sprites.add(b1)

        b2 = Widget.SpriteTextButton(self, '800 x 600', callback=self.resize800x600,
                                        group=self.events)
        b2.center(y=125)
        self.sprites.add(b2)

        b3 = Widget.SpriteTextButton(self, '1024 x 768', callback=self.resize1024x768,
                                        group=self.events)
        b3.center(y=125, dx=100)
        self.sprites.add(b3)

        b4 = Widget.SpriteTextButton(self, 'Full/Window', callback=self.toggle_fullscreen,
                                        group=self.events)
        b4.center(y=165)
        self.sprites.add(b4)

        self.pause()
Esempio n. 2
0
    def make_widget(self):
        self.events.kill()

        size = self.size
        w, h = size
        chars = int(w / 8.0)

        self.layer = Drawable.Layer(size=size, color=BLACK)
        self.layer.center(x=10, y=-10)
        self.terp = InteractiveConsole(self.locals)
        self.line = TextInput(self.layer, callback=self.run_command, text='', prompt='>>> ',
                                maxLength=chars, length=w, border=0, group=self.events)
        self.events.add(self.line.events.events())
        self.line.center(x=10, y=-10)
        self.events.add(self.line.events)
        #self.events.add(Event.KEYUP_Event(key=K_F1, callback=self.toggle_visible))

        self.events.add(Event.KEYUP_Event(key=K_UP, callback=self.history_prev))
        self.events.add(Event.KEYUP_Event(key=K_DOWN, callback=self.history_next))

        self.events.add(Event.KEYUP_Event(key=K_PAGEUP, callback=self.handle_pageup))
        self.events.add(Event.KEYUP_Event(key=K_PAGEDOWN, callback=self.handle_pagedown))

        self.lines_width = int(0.95 * w)
        self.lines_height = 5000
        self.lines_per_screen = int(0.8 * (h-45))
        self.lines = Drawable.Layer(w=self.layer, size=(self.lines_width, self.lines_height), color=BLACK)
        self.lines.center(x=10, y=15)
        self.lines_position = h - 52
Esempio n. 3
0
    def gameOver(self):
        """Show a Game Over message.
        
        """

        overMsg = Drawable.String(self.window, 'Game Over', fontSize=60, color=LBLUE)
        overMsg.center()
        self.overMsg = Drawable.Stationary(self.window, overMsg)
        self.overMsg.draw()
        pygame.display.update()
        pygame.time.wait(1500)
        self.playAgain()        
Esempio n. 4
0
    def makeButton(self):
        window = self.window
        text = self.text
        length = self.length
        size = self.size
        color = self.color
        border = self.border
        borderColor = self.borderColor
        padding = self.padding
        bgColor = self.bgColor

        t = Drawable.String(message=text, fontSize=size, color=color,
                                    bgcolor=bgColor)

        # use inverse text at cursor position if cursor_pos is set
        if hasattr(self, 'cursor_pos'):
            c = self.cursor_pos
            before = Drawable.String(message=text[:c], fontSize=size, color=color,
                                    bgcolor=bgColor)
            bw, bh = before.image.get_size()
            cursor = Drawable.String(message=text[c:c+1], fontSize=size, color=bgColor,
                                    bgcolor=color)
            cw, ch = cursor.image.get_size()
            t.image.blit(cursor.image, (bw, 0))

        w, h = t.image.get_size()
        if length is not None:
            s = pygame.Surface((length, h))
            s.fill(bgColor)
            s.blit(t.image, (0, 0))
            w = length
        self.length = w

        bw = w + 2*padding + 2*border
        bh = h + 2*padding + 2*border

        if border:
            #print 'boxing', dir(window)
            box = Drawable.Rectangle(w=window, width=bw, height=bh,
                                        color=borderColor)
            iw = w + 2*padding
            ih = h + 2*padding
            pygame.draw.rect(box.image, bgColor,
                                ((border, border), (iw, ih)))
        else:
            #print 'boxing', dir(window)
            box = Drawable.Rectangle(w=window, width=bw, height=bh, color=bgColor)
        box.image.blit(t.image, (border+padding, border+padding))
        if bgColor == TRANSPARENT:
            box.image.set_colorkey(TRANSPARENT)

        self.box = box
Esempio n. 5
0
    def new_line(self, text, prompt=''):
        save_text = prompt + text
        s = Drawable.String(w=self.lines, message=save_text, fontSize=22)
        w, h = s.get_size()

        # deal with output longer than one line
        if w > self.lines_width:
            try:
                t = Util.render_textrect(save_text, pygame.Rect(0, 0, self.lines_width, 1500), fontSize=22, trim=1)
                s = Drawable.Image(image=t)
            except Exception, e:
                s = Drawable.String(w=self.lines, message='Output too long for this window...', fontSize=22)
            w, h = s.get_size()
Esempio n. 6
0
    def playAgain(self):
        """Ask if player wants to play again.
        
        """

        againMsg = Drawable.String(message='Press [ENTER] to Play Again',
                                fontSize=60, color=LGREEN)
        againMsg.center()
        againMsg.nudge(dy=40)
        self.againMsg = Drawable.Stationary(sprite=againMsg)
        self.againMsg.draw()

        self.waitFor()
        if not self.quit:
            self.againMsg.clear()
            self.overMsg.clear()
            self.restart()
Esempio n. 7
0
    def __init__(self,
                    window=None,
                    size=None,
                    message=None,
                    centertext=1,
                    callback=None):
        """Initialize dialog

        @param window: Layer in which to draw the dialog box.
        @param size: Tuple of C{(width, height)} for dialog box.
        @param message: String message to be displayed. Text will be wrapped
            automatically to fit inside the box, but an error will be raised
            if the text will not fit.
        @param centertext: Center justify the message by default.
        @param callback: Function to call when the OK button is clicked
            or the enter key is pressed.

        """

        Dialog.__init__(self, window, size, callback)

        if message is None:
            if self.message is None:
                message = 'OK ?'
            else:
                message = self.message

        self.events.add(Event.KEYUP_Event(key=K_RETURN, callback=self.ok))

        w, h = self.get_size()
        rect_w = int(0.9 * w)
        rect_h = int(h - 70)
        rect = pygame.Rect(0, 0, rect_w, rect_h)
        textrect = Util.render_textrect(message, rect, fontSize=24, justification=centertext)
        s = Drawable.Image(w=self, image=textrect)
        s.center(y=15)
        s = Drawable.Stationary(w=self, sprite=s)
        s.draw()

        ok = SpriteTextButton(self, ' OK ', callback=self.ok,
                                        group=self.events)
        ok.center(y=-30)
        ok = Drawable.Stationary(w=self, sprite=ok)
        ok.draw()

        self.return_ok = None
Esempio n. 8
0
 def __init__(self, window=None, callback=None, group=None):
     b = Drawable.Square(w=window, side=15, color=WHITE)
     w, h = b.image.get_size()
     pygame.draw.line(b.image, BLACK, (0, 0), (w, h))
     pygame.draw.line(b.image, BLACK, (w, 0), (0, h))
     b.center(-5, 5)
     #print 'bc', b.center, window.screen.get_size(), b.get_position()
     StationaryButton.__init__(self, window, b, callback, group)
     self.draw()
Esempio n. 9
0
    def addLayer(self, size=None):
        """return a L{Drawable.Layer} and keep track.

        Each C{Game} has a list (C{.layers}) of all the layers
        in the game.

        """

        layer = Drawable.Layer(size=size)
        self.layers.append(layer)
        return layer
Esempio n. 10
0
File: Actor.py Progetto: mdurrer/cgd
class Actor:
	drawable = None
	velocity = (0,0,0)
	rvAxis = (1,0,0)
	rvMagnitude = 0
	friction = 3
	rFriction = 3
	
	def __init__(self):
		self.drawable = Drawable()
	
	def push(self,v):
		self.velocity = add3(self.velocity,v)
	
	def spin(self,mag,axis):
		newRV = add3(scale3(self.rvAxis,self.rvMagnitude),scale3(axis,mag))
		self.rvMagnitude = length3(newRV)
		self.rvAxis = normalize3(newRV)
	
	def update(self,t):
		self.drawable.draw()
		self.drawable.move(scale3(self.velocity,t))
		if lengthSq3(self.rvAxis)==0:
			self.rvAxis = (1,0,0)
		rvInstant = fromAngleAxisQ(self.rvMagnitude*t,self.rvAxis[0],self.rvAxis[1],self.rvAxis[2])
		self.drawable.rotate(rvInstant)
		self.velocity = scale3(self.velocity,1.0-t*self.friction)
		self.rvMagnitude = self.rvMagnitude*(1.0-t*self.rFriction)
Esempio n. 11
0
class Actor:
    drawable = None
    velocity = (0, 0, 0)
    rvAxis = (1, 0, 0)
    rvMagnitude = 0
    friction = 3
    rFriction = 3

    def __init__(self):
        self.drawable = Drawable()

    def push(self, v):
        self.velocity = add3(self.velocity, v)

    def spin(self, mag, axis):
        newRV = add3(scale3(self.rvAxis, self.rvMagnitude), scale3(axis, mag))
        self.rvMagnitude = length3(newRV)
        self.rvAxis = normalize3(newRV)

    def update(self, t):
        self.drawable.draw()
        self.drawable.move(scale3(self.velocity, t))
        if lengthSq3(self.rvAxis) == 0:
            self.rvAxis = (1, 0, 0)
        rvInstant = fromAngleAxisQ(self.rvMagnitude * t, self.rvAxis[0],
                                   self.rvAxis[1], self.rvAxis[2])
        self.drawable.rotate(rvInstant)
        self.velocity = scale3(self.velocity, 1.0 - t * self.friction)
        self.rvMagnitude = self.rvMagnitude * (1.0 - t * self.rFriction)
Esempio n. 12
0
    def __init__(self, window=None):
        """Initialize the color selector"""

        Dialog_OK.__init__(self, window=window, size=(400, 380))

        self.color_square = Drawable.Square(w=self, side=256)
        self.color_square.set_position((10, 10))
        self.color_square_array = pygame.surfarray.array2d(self.color_square.image)
        #self.R = 0
        self.hue = 0
        self.set_color_square()

        self.color_rect = Drawable.Rectangle(w=self, width=20, height=360)
        self.color_rect.set_position((370, 10))
        self.set_color_rect()

        self.show_square = Drawable.Square(w=self, side=50)
        self.show_square.set_position((300, 10))
        self.color_chosen = WHITE
        self.set_color_chosen(self.color_chosen)

        self.mousebuttonup(None)
Esempio n. 13
0
    def __init__(self, game):
        self.game = game
        w, h = conf.WINSIZE
        w = int(0.5 * w)
        h = int(0.8 * h)
        Drawable.Layer.__init__(self, size=(w, h))
        GameLooper.__init__(self)

        self.sprites = self.addGroup(layer=self)

        self.events.add(Event.KEYUP_Event(key=K_ESCAPE, callback=self._stop))

        self.set_background(color=BLACK)
        self.border(width=3, color=RED)
        s = Drawable.String(w=self, message='configuration',
                                fontSize=40)
        s.center(y=15)
        #print 1, s.get_position()
        s = Drawable.Stationary(w=self, sprite=s)
        s.draw()
        self.center()
        #print 2, self.get_position()

        q = Widget.SpriteTextButton(self, 'QUIT', callback=self._quit,
                                        group=self.events)
        q.center(y=50)
        self.sprites.add(q)

        cl = Widget.CloseButton(self, callback=self._stop,
                                        group=self.events)

        self.events.add(Event.KEYUP_Event(key=K_s, callback=self.save_config))
        save = Widget.SpriteTextButton(self, 'Save', callback=self.save_config,
                                        group=self.events)
        save.center(y=-50)
        self.sprites.add(save)

        self.show_video_modes()
Esempio n. 14
0
    def splash_screen(self):
        """Show the splash screen

        Called as soon as window is created

        Game subclasses which do not want a splash screen can
        override this with a function that just does pass

        """

        if self.splash_filename:
            self._splash = self.addLayer(size=(200, 100))
            self._splash.center()

            title = Drawable.Image(w=self._splash, filename=self.splash_filename)
            title.center()
            title.udraw()

            self._splash.udraw()
        else:
            self._splash = None
Esempio n. 15
0
File: main.py Progetto: mdurrer/cgd
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,[0.2, 0.2, 0.2, 1.0])

glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)

glShadeModel(GL_FLAT)

glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);

actor = Actor()

b = -6
r = 12

scenery = []
for x in range(b,b+r):
	for y in range(b,b+r):
		for z in range(b,b+r):
			flora = Drawable()
			flora.position = (x*20,y*20,z*20)
			scenery.append(flora)

envlist = glGenLists(1)
glNewList(envlist,GL_COMPILE)
for flora in scenery:
		flora.draw()
glEndList()

glutMainLoop()
Esempio n. 16
0
 def __init__(self):
     self.drawable = Drawable()
Esempio n. 17
0
 def __init__(self, filename=None, callback=None, group=None):
     if filename is None:
         filename = self.filename
     sprite = Drawable.Image(filename=filename)
     SpriteButton.__init__(self, sprite=sprite, callback=callback, group=group)
Esempio n. 18
0
class Console(Widget):
    def __init__(self, locals={}, size=(600, 200)):
        self.locals = locals
        Widget.__init__(self)

        self.size = size
        self.history = []
        self.history_curr_index = 0
        self.buffer = []
        self.paged_up = 0

        self.save_stdout = sys.stdout
        self.save_stderr = sys.stderr

        self.make_widget()

    def make_widget(self):
        self.events.kill()

        size = self.size
        w, h = size
        chars = int(w / 8.0)

        self.layer = Drawable.Layer(size=size, color=BLACK)
        self.layer.center(x=10, y=-10)
        self.terp = InteractiveConsole(self.locals)
        self.line = TextInput(self.layer, callback=self.run_command, text='', prompt='>>> ',
                                maxLength=chars, length=w, border=0, group=self.events)
        self.events.add(self.line.events.events())
        self.line.center(x=10, y=-10)
        self.events.add(self.line.events)
        #self.events.add(Event.KEYUP_Event(key=K_F1, callback=self.toggle_visible))

        self.events.add(Event.KEYUP_Event(key=K_UP, callback=self.history_prev))
        self.events.add(Event.KEYUP_Event(key=K_DOWN, callback=self.history_next))

        self.events.add(Event.KEYUP_Event(key=K_PAGEUP, callback=self.handle_pageup))
        self.events.add(Event.KEYUP_Event(key=K_PAGEDOWN, callback=self.handle_pagedown))

        self.lines_width = int(0.95 * w)
        self.lines_height = 5000
        self.lines_per_screen = int(0.8 * (h-45))
        self.lines = Drawable.Layer(w=self.layer, size=(self.lines_width, self.lines_height), color=BLACK)
        self.lines.center(x=10, y=15)
        self.lines_position = h - 52

    def resize(self, size):
        self.size = size
        self.make_widget()
        self.layer.udraw()

    def activate(self):
        Widget.activate(self)
        self.line.activate()
        self.layer.udraw()

    def deactivate(self):
        Widget.deactivate(self)
        self.line.deactivate()
        self.layer.uclear()

    def new_line(self, text, prompt=''):
        save_text = prompt + text
        s = Drawable.String(w=self.lines, message=save_text, fontSize=22)
        w, h = s.get_size()

        # deal with output longer than one line
        if w > self.lines_width:
            try:
                t = Util.render_textrect(save_text, pygame.Rect(0, 0, self.lines_width, 1500), fontSize=22, trim=1)
                s = Drawable.Image(image=t)
            except Exception, e:
                s = Drawable.String(w=self.lines, message='Output too long for this window...', fontSize=22)
            w, h = s.get_size()
        s.set_position((5, self.lines_position))
        self.lines_position += h

        if self.lines_position > self.lines_height - 50:
            # starting to run out of room in the lines surface...
            # i am not sure how large to make this or if i should
            # bother trying to extend it if it starts to get full.
            Util.beep()

        s = Drawable.Stationary(w=self.lines, sprite=s)
        s.draw()
        self.lines.clear()
        self.lines.nudge(dy=-h)
        self.lines.udraw()
Esempio n. 19
0
File: Actor.py Progetto: mdurrer/cgd
	def __init__(self):
		self.drawable = Drawable()