[Pen-commits] SF.net SVN: pen:[126] src
Brought to you by:
mdgeorge
From: <mdg...@us...> - 2008-12-05 23:52:51
|
Revision: 126 http://pen.svn.sourceforge.net/pen/?rev=126&view=rev Author: mdgeorge Date: 2008-12-05 23:52:47 +0000 (Fri, 05 Dec 2008) Log Message: ----------- Split the dragging demo out of drag.py and added it to the menu under tech demos Modified Paths: -------------- src/drag.py src/pen.py Added Paths: ----------- src/demos/dragdemo.py Added: src/demos/dragdemo.py =================================================================== --- src/demos/dragdemo.py (rev 0) +++ src/demos/dragdemo.py 2008-12-05 23:52:47 UTC (rev 126) @@ -0,0 +1,184 @@ +import pygame +from pygame import draw +from pygame.sprite import DirtySprite, LayeredDirty +from pygame.constants import * + +from drag import * + +def draw_mask(mask): + import pygame + result = pygame.Surface(mask.get_size()) + result.set_colorkey((0,0,0)) + for y in range(result.get_size()[1]): + for x in range(result.get_size()[0]): + if mask.get_at((x,y)): + result.set_at((x,y), (127,127,127)) + return result + +def rundemo(): + from globals import screen + + pygame.event.set_blocked( None ) + pygame.event.set_allowed( MOUSEBUTTONDOWN ) + pygame.event.set_allowed( MOUSEBUTTONUP ) + pygame.event.set_allowed( QUIT ) + pygame.event.set_allowed( KEYDOWN ) + pygame.event.set_allowed( MOUSEMOTION ) + + sprites = [] + + # blocky barbell + surf = pygame.Surface((75,25)) + surf.set_colorkey((0,0,0)) + draw.rect(surf, (255,255,255), ((0,0),(25,25))) + draw.rect(surf, (255,255,255), ((50,0),(25,25))) + draw.rect(surf, (255,255,255), ((0,10),(75,5))) + sprite = DirtySprite() + sprite.base = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + sprites.append(sprite) + + # big L + surf = pygame.Surface((100,100)) + surf.set_colorkey((0,0,0)) + draw.rect(surf, (255,255,255), ((0,0),(100,25))) + draw.rect(surf, (255,255,255), ((75,0),(25,100))) + sprite = DirtySprite() + sprite.base = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + sprites.append(sprite) + + # conjoined circles + surf = pygame.Surface((100,20)) + surf.set_colorkey((0,0,0)) + draw.circle(surf, (255,255,255), (10,10), 10) + draw.circle(surf, (255,255,255), (90,10), 10) + sprite = DirtySprite() + sprite.base = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + sprites.append(sprite) + + # small rectangle + surf = pygame.Surface((10,10)) + surf.set_colorkey((0,0,0)) + surf.fill((255,255,255)) + sprite = DirtySprite() + sprite.base = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + sprites.append(sprite) + + # hole + surf = pygame.Surface((100,100)) + surf.set_colorkey((0,0,0)) + surf.fill((255,255,255)) + draw.rect(surf, (0,0,0), ((30,30), (40,40))) + sprite = DirtySprite() + sprite.base = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + sprites.append(sprite) + + # draw highlighted versions + for s in sprites: + # fill contact with blue + s.contact = s.base.copy() + s.contact.fill((0,0,255)) + + # mask out the holes + s.base.set_colorkey((255,255,255)) + s.contact.blit(s.base, (0,0)) + + # set the colorkeys + s.base.set_colorkey((0,0,0)) + s.contact.set_colorkey((0,0,0)) + + s.image = s.base + s.rect.move_ip((300,300)) + + bg = pygame.Surface((1024,768)) + debug = False + shadow = None + dragman = DragManager(sprites) + drawman = LayeredDirty(sprites) + contact = [] + circles = [] + while True: + event = pygame.event.wait() + if event.type == MOUSEBUTTONDOWN and event.button == 1: + if dragman.select( event.pos ) is not None and debug: + shadow = DirtySprite() + shadow.image = draw_mask(dragman._shadow) + shadow.rect = dragman._shrect + drawman.add(shadow, layer=-1) + elif event.type == MOUSEBUTTONUP and event.button == 1: + dragman.drop() + if shadow is not None: + shadow.kill() + shadow = None + for c in contact: + c.dirty = 1 + c.image = c.base + elif event.type == MOUSEMOTION: + dragman.drag( event.pos ) + if dragman.selected() is not None: + dragman.selected().dirty = 1 + for c in contact: + c.dirty = 1 + c.image = c.base + contact = dragman.contact() + for c in contact: + c.dirty = 1 + c.image = c.contact + + elif event.type == KEYDOWN and event.key == K_ESCAPE: + break + elif event.type == KEYDOWN and event.key == K_TAB: + debug = not debug + elif event.type == KEYDOWN and event.key == K_SPACE: + sprite = DirtySprite() + + surf = pygame.Surface((100,100)) + surf.set_colorkey((0,0,0)) + draw.circle(surf, (255,255,255), surf.get_rect().center, 45) + label = pygame.font.Font(None, 20).render(str(len(circles)+1), False, (0,0,0), (255,255,255)) + rect = label.get_rect() + rect.center = surf.get_rect().center + surf.blit(label, rect) + + sprite.base = surf + sprite.image = surf + sprite.rect = surf.get_rect() + sprite.mask = pygame.mask.from_surface(surf) + + surf = pygame.Surface((100,100)) + surf.set_colorkey((0,0,0)) + draw.circle(surf, (0,0,255), surf.get_rect().center, 45) + label = pygame.font.Font(None, 20).render(str(len(circles)+1), False, (255,255,255), (0,0,255)) + rect = label.get_rect() + rect.center = surf.get_rect().center + surf.blit(label, rect) + + sprite.contact = surf + + drawman.add(sprite) + dragman.add(sprite) + circles.append(sprite) + + elif event.type == KEYDOWN and event.key == K_BACKSPACE: + if circles: + c = circles[len(circles) - 1] + c.kill() + circles = circles[:-1] + + pygame.display.update(drawman.draw(screen, bg)) + +if __name__ == '__main__': + rundemo() + +# +# vim: ts=4 sw=4 ai +# Modified: src/drag.py =================================================================== --- src/drag.py 2008-12-04 16:07:46 UTC (rev 125) +++ src/drag.py 2008-12-05 23:52:47 UTC (rev 126) @@ -162,182 +162,10 @@ s.__shrect.top - self._shrect.top)) -## Testing ##################################################################### - -def draw_mask(mask): - import pygame - result = pygame.Surface(mask.get_size()) - result.set_colorkey((0,0,0)) - for y in range(result.get_size()[1]): - for x in range(result.get_size()[0]): - if mask.get_at((x,y)): - result.set_at((x,y), (127,127,127)) - return result - if __name__ == '__main__': - import pygame - from pygame import draw - from pygame.sprite import DirtySprite, LayeredDirty - from pygame.constants import * + import demos.dragdemo + demos.dragdemo.rundemo() - pygame.display.init() - pygame.font.init() - - sprites = [] - - # blocky barbell - surf = pygame.Surface((75,25)) - surf.set_colorkey((0,0,0)) - draw.rect(surf, (255,255,255), ((0,0),(25,25))) - draw.rect(surf, (255,255,255), ((50,0),(25,25))) - draw.rect(surf, (255,255,255), ((0,10),(75,5))) - sprite = DirtySprite() - sprite.base = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - sprites.append(sprite) - - # big L - surf = pygame.Surface((100,100)) - surf.set_colorkey((0,0,0)) - draw.rect(surf, (255,255,255), ((0,0),(100,25))) - draw.rect(surf, (255,255,255), ((75,0),(25,100))) - sprite = DirtySprite() - sprite.base = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - sprites.append(sprite) - - # conjoined circles - surf = pygame.Surface((100,20)) - surf.set_colorkey((0,0,0)) - draw.circle(surf, (255,255,255), (10,10), 10) - draw.circle(surf, (255,255,255), (90,10), 10) - sprite = DirtySprite() - sprite.base = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - sprites.append(sprite) - - # small rectangle - surf = pygame.Surface((10,10)) - surf.set_colorkey((0,0,0)) - surf.fill((255,255,255)) - sprite = DirtySprite() - sprite.base = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - sprites.append(sprite) - - # hole - surf = pygame.Surface((100,100)) - surf.set_colorkey((0,0,0)) - surf.fill((255,255,255)) - draw.rect(surf, (0,0,0), ((30,30), (40,40))) - sprite = DirtySprite() - sprite.base = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - sprites.append(sprite) - - # draw highlighted versions - for s in sprites: - # fill contact with blue - s.contact = s.base.copy() - s.contact.fill((0,0,255)) - - # mask out the holes - s.base.set_colorkey((255,255,255)) - s.contact.blit(s.base, (0,0)) - - # set the colorkeys - s.base.set_colorkey((0,0,0)) - s.contact.set_colorkey((0,0,0)) - - s.image = s.base - s.rect.move_ip((300,300)) - - - screen = pygame.display.set_mode((1024, 768)) - bg = pygame.Surface((1024,768)) - debug = False - shadow = None - dragman = DragManager(sprites) - drawman = LayeredDirty(sprites) - contact = [] - circles = [] - while True: - event = pygame.event.wait() - if event.type == MOUSEBUTTONDOWN and event.button == 1: - if dragman.select( event.pos ) is not None and debug: - shadow = DirtySprite() - shadow.image = draw_mask(dragman._shadow) - shadow.rect = dragman._shrect - drawman.add(shadow, layer=-1) - elif event.type == MOUSEBUTTONUP and event.button == 1: - dragman.drop() - if shadow is not None: - shadow.kill() - shadow = None - for c in contact: - c.dirty = 1 - c.image = c.base - elif event.type == MOUSEMOTION: - dragman.drag( event.pos ) - if dragman.selected() is not None: - dragman.selected().dirty = 1 - for c in contact: - c.dirty = 1 - c.image = c.base - contact = dragman.contact() - for c in contact: - c.dirty = 1 - c.image = c.contact - - elif event.type == KEYDOWN and event.key == K_ESCAPE: - break - elif event.type == KEYDOWN and event.key == K_TAB: - debug = not debug - elif event.type == KEYDOWN and event.key == K_SPACE: - sprite = DirtySprite() - - surf = pygame.Surface((100,100)) - surf.set_colorkey((0,0,0)) - draw.circle(surf, (255,255,255), surf.get_rect().center, 45) - label = pygame.font.Font(None, 20).render(str(len(circles)+1), False, (0,0,0), (255,255,255)) - rect = label.get_rect() - rect.center = surf.get_rect().center - surf.blit(label, rect) - - sprite.base = surf - sprite.image = surf - sprite.rect = surf.get_rect() - sprite.mask = pygame.mask.from_surface(surf) - - surf = pygame.Surface((100,100)) - surf.set_colorkey((0,0,0)) - draw.circle(surf, (0,0,255), surf.get_rect().center, 45) - label = pygame.font.Font(None, 20).render(str(len(circles)+1), False, (255,255,255), (0,0,255)) - rect = label.get_rect() - rect.center = surf.get_rect().center - surf.blit(label, rect) - - sprite.contact = surf - - drawman.add(sprite) - dragman.add(sprite) - circles.append(sprite) - - elif event.type == KEYDOWN and event.key == K_BACKSPACE: - if circles: - c = circles[len(circles) - 1] - c.kill() - circles = circles[:-1] - - pygame.display.update(drawman.draw(screen, bg)) - - - # # vim: ts=4 sw=4 ai # Modified: src/pen.py =================================================================== --- src/pen.py 2008-12-04 16:07:46 UTC (rev 125) +++ src/pen.py 2008-12-05 23:52:47 UTC (rev 126) @@ -64,8 +64,8 @@ import os from demos import penmunk demos_menu.add_entry( "Physics", penmunk.rundemo ) -# import drag -# demos_menu.add_entry( "Dragging", None ) +from demos import dragdemo +demos_menu.add_entry( "Dragging", dragdemo.rundemo ) from demos import circles demos_menu.add_entry( "Collision Avoiding Drag", circles.rundemo ) demos_menu.add_entry( "Back", menu_exit ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |